{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>yr</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.110792</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.089623</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.152669</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.177174</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0.181546</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 35 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant  season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  \\\n",
       "0        1         1         0         0         0       1       0       0   \n",
       "1        2         1         0         0         0       1       0       0   \n",
       "2        3         1         0         0         0       1       0       0   \n",
       "3        4         1         0         0         0       1       0       0   \n",
       "4        5         1         0         0         0       1       0       0   \n",
       "\n",
       "   mnth_4  mnth_5    ...     weekday_5  weekday_6      temp     atemp  \\\n",
       "0       0       0    ...             0          1  0.355170  0.373517   \n",
       "1       0       0    ...             0          0  0.379232  0.360541   \n",
       "2       0       0    ...             0          0  0.171000  0.144830   \n",
       "3       0       0    ...             0          0  0.175530  0.174649   \n",
       "4       0       0    ...             0          0  0.209120  0.197158   \n",
       "\n",
       "        hum  windspeed  holiday  workingday  yr       cnt  \n",
       "0  0.828620   0.284606        0           0   0  0.110792  \n",
       "1  0.715771   0.466215        0           0   0  0.089623  \n",
       "2  0.449638   0.465740        0           1   0  0.152669  \n",
       "3  0.607131   0.284297        0           1   0  0.177174  \n",
       "4  0.449313   0.339143        0           1   0  0.181546  \n",
       "\n",
       "[5 rows x 35 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.metrics import r2_score  #评价回归预测模型的性能\n",
    "from sklearn.metrics import mean_squared_error#RMSE评价回归预测模型的性能\n",
    "\n",
    "import matplotlib.pyplot as plt   #画图\n",
    "import seaborn as sns\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "# 图形出现在Notebook里而不是新窗口\n",
    "%matplotlib inline\n",
    "\n",
    "train = pd.read_csv(\"FE_day.csv\")\n",
    "\n",
    "train.head()\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 80%做训练数据，20%为测试数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index(['season_1', 'season_2', 'season_3', 'season_4', 'mnth_1', 'mnth_2',\n",
      "       'mnth_3', 'mnth_4', 'mnth_5', 'mnth_6', 'mnth_7', 'mnth_8', 'mnth_9',\n",
      "       'mnth_10', 'mnth_11', 'mnth_12', 'weathersit_1', 'weathersit_2',\n",
      "       'weathersit_3', 'weekday_0', 'weekday_1', 'weekday_2', 'weekday_3',\n",
      "       'weekday_4', 'weekday_5', 'weekday_6', 'temp', 'atemp', 'hum',\n",
      "       'windspeed', 'holiday', 'workingday', 'yr'],\n",
      "      dtype='object')\n",
      "train shape:  (584, 33)  test shape: (147, 33)  y_train: (584,)  y_test: (147,)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "682    0.468477\n",
       "250    0.209388\n",
       "336    0.413254\n",
       "260    0.489185\n",
       "543    0.841348\n",
       "Name: cnt, dtype: float64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = train.drop(['instant','cnt'],axis=1)\n",
    "y = train['cnt']\n",
    "feature_names = X.columns\n",
    "\n",
    "print(feature_names)\n",
    "\n",
    "# 在scikit-learn中，调 ⽤用train_test_split得到新的训练集和校验集。\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,train_size=0.8,random_state=42)\n",
    "\n",
    "print(\"train shape: \", X_train.shape, \" test shape:\", X_test.shape, \" y_train:\", y_train.shape, \" y_test:\", y_test.shape)\n",
    "y_train.head()\n",
    "#y_test.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## OLS"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The trained model is: y =[-2.25594766e+12 -2.25594766e+12 -2.25594766e+12 -2.25594766e+12\n",
      "  1.58146842e+11  1.58146842e+11  1.58146842e+11  1.58146842e+11\n",
      "  1.58146842e+11  1.58146842e+11  1.58146842e+11  1.58146842e+11\n",
      "  1.58146842e+11  1.58146842e+11  1.58146842e+11  1.58146842e+11\n",
      " -2.42424147e+11 -2.42424147e+11 -2.42424147e+11 -9.89170553e+09\n",
      " -7.83377450e+10 -7.83377450e+10 -7.83377450e+10 -7.83377450e+10\n",
      " -7.83377450e+10 -9.89170553e+09  3.49926425e-01  1.06939074e-01\n",
      " -1.60898797e-01 -1.43200450e-01  6.84460394e+10  6.84460394e+10\n",
      "  2.27714628e-01]x + 2350116670882.065\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>mnth_9</td>\n",
       "      <td>1.581468e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>mnth_3</td>\n",
       "      <td>1.581468e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>mnth_5</td>\n",
       "      <td>1.581468e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>mnth_10</td>\n",
       "      <td>1.581468e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>mnth_6</td>\n",
       "      <td>1.581468e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>mnth_4</td>\n",
       "      <td>1.581468e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>mnth_8</td>\n",
       "      <td>1.581468e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>mnth_2</td>\n",
       "      <td>1.581468e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>mnth_1</td>\n",
       "      <td>1.581468e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>mnth_12</td>\n",
       "      <td>1.581468e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>mnth_11</td>\n",
       "      <td>1.581468e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>mnth_7</td>\n",
       "      <td>1.581468e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>workingday</td>\n",
       "      <td>6.844604e+10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>holiday</td>\n",
       "      <td>6.844604e+10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>temp</td>\n",
       "      <td>3.499264e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>yr</td>\n",
       "      <td>2.277146e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>atemp</td>\n",
       "      <td>1.069391e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>windspeed</td>\n",
       "      <td>-1.432005e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>hum</td>\n",
       "      <td>-1.608988e-01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>weekday_6</td>\n",
       "      <td>-9.891706e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>weekday_0</td>\n",
       "      <td>-9.891706e+09</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>weekday_5</td>\n",
       "      <td>-7.833774e+10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>weekday_3</td>\n",
       "      <td>-7.833774e+10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>weekday_4</td>\n",
       "      <td>-7.833774e+10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>weekday_2</td>\n",
       "      <td>-7.833774e+10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>weekday_1</td>\n",
       "      <td>-7.833774e+10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>weathersit_1</td>\n",
       "      <td>-2.424241e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>weathersit_2</td>\n",
       "      <td>-2.424241e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>weathersit_3</td>\n",
       "      <td>-2.424241e+11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>season_4</td>\n",
       "      <td>-2.255948e+12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>season_2</td>\n",
       "      <td>-2.255948e+12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>season_3</td>\n",
       "      <td>-2.255948e+12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>season_1</td>\n",
       "      <td>-2.255948e+12</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         columns          coef\n",
       "12        mnth_9  1.581468e+11\n",
       "6         mnth_3  1.581468e+11\n",
       "8         mnth_5  1.581468e+11\n",
       "13       mnth_10  1.581468e+11\n",
       "9         mnth_6  1.581468e+11\n",
       "7         mnth_4  1.581468e+11\n",
       "11        mnth_8  1.581468e+11\n",
       "5         mnth_2  1.581468e+11\n",
       "4         mnth_1  1.581468e+11\n",
       "15       mnth_12  1.581468e+11\n",
       "14       mnth_11  1.581468e+11\n",
       "10        mnth_7  1.581468e+11\n",
       "31    workingday  6.844604e+10\n",
       "30       holiday  6.844604e+10\n",
       "26          temp  3.499264e-01\n",
       "32            yr  2.277146e-01\n",
       "27         atemp  1.069391e-01\n",
       "29     windspeed -1.432005e-01\n",
       "28           hum -1.608988e-01\n",
       "25     weekday_6 -9.891706e+09\n",
       "19     weekday_0 -9.891706e+09\n",
       "24     weekday_5 -7.833774e+10\n",
       "22     weekday_3 -7.833774e+10\n",
       "23     weekday_4 -7.833774e+10\n",
       "21     weekday_2 -7.833774e+10\n",
       "20     weekday_1 -7.833774e+10\n",
       "16  weathersit_1 -2.424241e+11\n",
       "17  weathersit_2 -2.424241e+11\n",
       "18  weathersit_3 -2.424241e+11\n",
       "3       season_4 -2.255948e+12\n",
       "1       season_2 -2.255948e+12\n",
       "2       season_3 -2.255948e+12\n",
       "0       season_1 -2.255948e+12"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "# 1.使用默认配置初始化学习器实例\n",
    "lr = LinearRegression()\n",
    "\n",
    "# 2.用训练数据训练模型参数\n",
    "lr.fit(X_train, y_train)\n",
    "\n",
    "print(\"The trained model is: y ={}x + {}\".format(lr.coef_, lr.intercept_))\n",
    "\n",
    "# 3. 用训练好的模型对测试集进行预测\n",
    "y_test_pred_lr = lr.predict(X_test)\n",
    "y_train_pred_lr = lr.predict(X_train)\n",
    "\n",
    "fs = pd.DataFrame({\"columns\":list(feature_names), \"coef\":list((lr.coef_.T))})\n",
    "fs.sort_values(by=['coef'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The RMSE score of LinearRegression on test is 0.008411263678485404\n",
      "The RMSE score of LinearRegression on train is 0.007432524770631933\n"
     ]
    }
   ],
   "source": [
    "# 使用RMSE评价模型在测试集和训练集上的性能，并输出评估结果\n",
    "#测试集\n",
    "print ('The RMSE score of LinearRegression on test is', mean_squared_error(y_test, y_test_pred_lr))\n",
    "#训练集\n",
    "print ('The RMSE score of LinearRegression on train is', mean_squared_error(y_train, y_train_pred_lr))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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j+Brrrlme8Bu2bIlt956a04//fS89a1vze/8zu/kJS95SU4//fSH3N8NN9yQM888M4sXL06SnHvuufnud7/7iDO01vLOd74z119/ffbZZ5/ccccd2bhxYx7/+Mdv3+bkk0/O6173utx///0555xzsnz58il9vWeddVb233//7L///lmyZEk2btyY1atXZ+3atTn55JO3r8mSJUuSJFdccUUuvvjibN26NRs2bMi3vvWt7RF87rnnTmmGXXE4BADADHvwmODbb78999133/Zjgltrecc73pEbb7wxN954Y9atW5eVK1fmqU99atauXZvjjz8+73jHO/Ke97znYfe5s5cJW7BgQR544IHt93/fffclSS699NJs3rw5a9euzY033pjDDz/8Ya+1e8YZZ+T666/PkUcemfPOOy+f+tSnpvT17r///ttP77vvvtm6dWtaazn//PO3f63f+c53smrVqnz/+9/PhRdemNWrV+emm27KWWed9ZC5DjjggCnNsCsiGABglhx88MH50Ic+lAsvvDD3339/XvSiF+XjH//49ldmuOOOO7Jp06bceeedefSjH51Xv/rVeetb35qvf/3rD7mf5zznObnuuuty11135f7773/I8bLLli3L2rVrkyRXXXVV7r///iTjh1QsWbIkCxcuzLXXXpvbb7/9YfPdfvvtWbJkSd7whjdk5cqVD3vc6VixYkWuvPLKbNq0KUnyox/9KLfffnvuueeeHHDAATn44IOzcePGfPGLXxzZYz4Sh0MAAH0Z9Uuk7aaTTjopJ554Yi677LKcd955ueWWW3LaaaclGX8S22c+85msW7cub3vb27LPPvtk4cKF+chHPvKQ+zjiiCOyatWqnHbaaTniiCPyrGc9a/uTzN7whjfk7LPPzimnnJIVK1Zs35P6qle9Ki996UszNjaW5cuX5+lPf/rDZrvuuuvy/ve/PwsXLsyBBx640z3BZ511VhYuXJhk/Il+b37zm3f5dR977LF573vfmxe+8IV54IEHsnDhwlx00UU59dRTc9JJJ+W4447L0Ucfnec+97nDL+Y0VGttVh4oScbGxtqDz2gEAJgNt9xyS57xjGfM9RiM2GTf16pa21ob28lNHsLhEAAAdEcEAwDQHREMAOz1ZvPwT2beKL6fnhgHwN5huk92muMnSzFzFi1alLvuuiuHHXbYTl9WjD1H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\n",
      "text/plain": [
       "<Figure size 720x504 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#在训练集上观察预测残差的分布，看是否符合模型假设：噪声为0均值的高斯噪声\n",
    "f, ax = plt.subplots(figsize=(10, 7)) \n",
    "f.tight_layout() \n",
    "ax.hist(y_train - y_train_pred_lr, bins=40, label='Residuals Linear', color='r', alpha=.5); \n",
    "ax.set_title(\"Histogram of Residuals\") \n",
    "ax.legend(loc='best');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAALICAYAAABiqwZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xt8FNXdP/DP2c0mbABJgACyiuANqFJAgrfYp4JKKAhEELGVtnhpbdXS2hINlgpYLGmjRX39vNRr9REVEYkgYtRCpcKDNRgQL+ANBRa5E5QkwGZzfn+EWTa7M7OzuzM7s7uf9+v1vF4Pm93Zs5NN/cyZ7/keIaUEERERERG1ctk9ACIiIiIiJ2FAJiIiIiIKw4BMRERERBSGAZmIiIiIKAwDMhERERFRGAZkIiIiIqIwDMhERERERGEYkImIiIiIwjAgExERERGFybF7APHq2rWr7N27t93DICIiIqI0s27dur1SyqJYz0u7gNy7d2/U1tbaPQwiIiIiSjNCiK+NPI8lFkREREREYRiQiYiIiIjCMCATEREREYVhQCYiIiIiCsOATEREREQUhgGZiIiIiCgMAzIRERERURgGZCIiIiKiMAzIRERERERhGJCJiIiIiMIwIBMRERERhWFAJiIiIiIKw4BMRERERBSGAZmIiIiIKAwDMhERERFRGAZkIiIiIqIwDMhERERERGEYkImIiIiIwjAgExERERGFYUAmIiIiIgrDgExEREREFIYBmYiIiIgoDAMyEREREVEYBmQiIiIiojAMyEREREREYSwLyEKIJ4UQu4UQH2r8XAghHhBCfC6E+EAIcY5VYyEiIiIiMsrKGeR/Ahip8/MfATjj2P/9EsDDFo6FiIiIiMgQywKylHIVgP06TxkH4BnZai2AAiHEiVaNh4iIiIjICDtrkH0AtoX9e/uxx6IIIX4phKgVQtTu2bMnJYMjIiIiouQEg0H89re/xX/+8x+7hxIXOwOyUHlMqj1RSvmolLJYSllcVFRk8bCIiIiIKFmHDx/GxIkT8cADD+Dtt9+2ezhxybHxvbcDODns3ycB2GHTWIiIiIjIJPX19Rg7dizeeecd3H///Zg6dardQ4qLnQF5CYBbhBAvADgPwEEp5Tc2joeIiIiIkrRv3z5cfPHF2Lx5M55//nlMmjTJ7iHFzbKALIR4HsDFALoKIbYDmAnAAwBSykcAvAZgFIDPATQCuNaqsRARERFRahQWFuK8887Dfffdh0suucTu4SRESKla9utYxcXFsra21u5hEBEREVGYd999FyeeeCJ69epl91A0CSHWSSmLYz2PO+kRERERUVKWLVuGYcOG4eabb7Z7KKZgQCYiIiKihD311FMYN24cvve97+GJJ56wezimYEAmIiIiorhJKTF37lxcd911GD58OFauXIlu3brZPSxTMCATERERUdwOHz6MF198ET/5yU/w6quvomPHjnYPyTR2tnkjIiIiojRz5MgRBINB5OfnY8WKFejUqRNcrsyac82sT0NERERElvn2228xatQoXH311ZBSorCwMOPCMcCATEREREQG7Ny5Ez/84Q+xatUqTJw4EUIIu4dkGZZYEBEREZGuzz77DKWlpdi9ezeWLl2KkSNH2j0kSzEgExEREZGmlpYWXHHFFfjuu++wcuVKDB061O4hWY4BmYiIiIg0uVwuPP300+jYsSPOPPNMu4eTEgzIRERERBRl/vz5+OyzzzBr1iwMGTLE7uGkFBfpEREREVEb9957LyZPnoy3334bR48etXs4KceATEREREQAWuuNp02bhmnTpmHixIl4/fXXkZuba/ewUo4BmYiIiIgAADfccAPuvfde3HLLLXj++eeRl5dn95BswRpkIiIiIgIADB8+HKeffjqmT5+e0X2OY2FAJiIiIspiu3fvRl1dHUpLSzF58mS7h+MIDMhEREREWerLL79EaWkp9u7di6+++gqdOnWye0iOwBpkIiIioiy0fv16XHjhhdi/fz9ee+01huMwDMhEREREWWbFihX4n//5H+Tm5uKdd97BBRdcYPeQHIUBmYiIiCjL1NTUoFevXlizZg369+9v93AcR0gp7R5DXIqLi2Vtba3dwyAiIiJKO/v27UOXLl3Q0tKCQ4cO4YQTTrB7SCklhFgnpSyO9TzOIBMRERFlOCkl7rjjDpx99tnw+/1wuVxZF47jwYBMRERElMGam5tx/fXXY+7cuRg3bhx69Ohh95AcjwGZiIiIKEM1NjairKwMTz31FGbNmoWHH34Ybrfb7mE5HvsgExEREWWomTNnYvny5Xj44Yfxq1/9yu7hpA0GZCIiIqIMdeedd+Kyyy7DiBEj7B5KWmGJBREREVEG2bhxI8aPH4+GhgZ07NiR4TgBDMhEREREGWLVqlX4wQ9+gHfffRd+v9/u4aQtBmQiIiKiDLB48WKMGDECPXr0wJo1a3DmmWfaPaS0xYBMRERElOaee+45XHnllRg8eDBWr16NU045xe4hpTUGZCIiIqI0d/755+OnP/0p3nrrLXTp0sXu4aQ9BmQiIiKiNBQMBvH0009DSolTTz0V//znP9G+fXu7h5URGJCJiIiI0kxTUxOuvPJKTJkyBTU1NXYPJ+OwDzIRERFRGjlw4ADGjRuHd955Bw888ABGjhxp95AyDgMyERERUZrYvn07fvSjH+HTTz/FCy+8gKuuusruIWUkBmQiIiKiNPH5559j586dWL58OYYPH273cDIWAzIRERGRw+3atQvdu3fHxRdfjC1btqBDhw52DymjcZEeERERkYMtXboUp556KhYvXgwADMcpwIBMRERE5FBPPvkkrrjiCvTv3x8lJSV2DydrMCATEREROYyUEnfffTeuv/56XHLJJfj3v/+Nbt262T2srMGATEREROQwb7/9NmbMmIFrrrkGS5cuZVlFinGRHhEREZHDXHzxxVi2bBlGjhwJl4vzmanGM05ERETkAAcPHsS4cePw/vvvAwBGjRrFcGwTnnUiIiIim33zzTf44Q9/iNdeew2ff/653cPJeiyxICIiIrLRp59+itLSUuzZswevvvoqSktL7R5S1mNAJiIiIrLJZ599FmrftnLlSgwdOtTmERHAEgsiIiIi2/Tu3RsTJkzAmjVrGI4dhAGZiIiIKMVeeukl7Nq1Cx6PB4888gjOOOMMu4dEYRiQiYiIiFLonnvuwcSJE3H33XfbPRTSwBpkIiIiohRoaWlBeXk5/v73v+Oqq65CVVWV3UMiDQzIRERERCarrvOjqmYzdtQ3oWeBF78b3gfV98/Ac889h6lTp2LevHnscexgDMhEREREJqqu82P6yxvRFAgCAPz1Tfjji7VoXPMu5s6di9tvvx1CCJtHSXoYkImIiIhMVFWzORSOg40H4crLx9GcfJx07QOoqBhl8+jICM7tExEREZloR30TACBQvxM7n52GfTUPAQB2NUo7h0VxYEAmIiIiMlHPAi+O7voCO5+dhpamQ+g4cETocUoPDMhEREREJiot3Itdz1VAuDzocc3fkOfrD6/HjfLSvnYPjQxiDTIRERGRSRoaGvD//nQLTurVC0VXzsY+2QE9C7woL+2LssE+u4dHBjEgExEREZmkffv2WLZsGU4//XQUFhbaPRxKEAMyERGRxSJ74nI2MbNIKXHHHXegc+fOKC8vx9ChQ+0eEiWJNchEREQWUnri+uubINHaE3f6yxtRXee3e2hkgkAggGuvvRaVlZXYsmULpGSnikzAgExERGSh8J64iqZAEFU1m20aEZmloaEBZWVlePrppzF79mw8+OCD3AAkQ7DEgoiIyEJKT1yjj1N6CAaDGDFiBNauXYtHHnkEN954o91DSqlMLxviDDIREZGFtHrfsiduenO73fjZz36GRYsWZWU4zvSyIQZkIiIiC5WX9oXX427zGHvipq+NGzfirbfeAgDceOONKCsrs3lEqZcNZUMssSAiIrKQcts5k29HZ4tVq1Zh7Nix6NGjBz788EPk5GRnjMqGsqHs/M0SERGlUNlgHwOxA+nV0Ub+7KKcL3D/jN+gT58+qKmpUQ3HmV6Xq+hZ4IVfJQxnUtkQAzIRERFlHaWOVikVUOpoFeE/27RyEda88TD6fv8cvLOiBl26dInreJkWkstL+7b5rEDmlQ0xIBMREVHWiVVHq/xMSomjOz+H97RiFEyYpRqOYx0v0wJyNpQNMSATERFR1olVRytbggg2HEBOx67oXHozAGBXo/YmINlQlxsu08uG2MWCiIiI0kJ1nR8llSvQp2IZSipXJNVWTK/9Xvf2Luypnoud829Hy9EmCJcbwuXWrbFlO7/MwoBMREREjmd2712t9nu/vqA7vn15Fpo+excnDC2DK9cb+plejS3b+WUWllgQERE5XLZ0R9Bjdo2vWh3ttYM6ovLmSfjis88wrfIhrJFnGj7n2VCXm00YkImIKCkMb8dZcS6yqTuCHitqfCPraCdNmoStW7fi9ddfx7Bhw5I+HqUvBmQiIkoYw9txVp2LTOqOkMwFhJW9d6WUEELg4Ycfxvbt2/H9738/6WNSemMNMhERJSwbtpw1yqpzkSndEZKtIbaqxveO+55C5/4XoPe0aox5dD2+DHYJjdesBYGUfjiDTERECcuU8GYGq85FpuxaluxMuBU1vrfMvAcP/vl25PY4DR0CTfDXezD95Y2o/Xo/Fq3zZ+SdEZZEGcOATERECcuU8GZErGBh1bnIlF3LzLiAMKvGV0qJv/zlL3jwrhlo1+ccFJVND3WraAoE8fy72xCUbXsep2tZSziWRBnHEgsiIkpYtrS2MlIeYNW5KBvsw9zxA+Ar8EIA8BV4MXf8gLQLNE7qEzx79mzMmDED7c8ahm4T7gyFY0VkOFak+50RlkQZxxlkIiJKWLa0tjJSHmDluYicOVXqY9PpnDtpJnzixImQUuLNvB9gx7dHon7uFkI1JKf7nRGWRBnHgExEREnJhtZWRoNFKs5Fut4mt/ti6uDBg7it8kFsPOE8fHPwMHoW/BDD+xW1qTUGWkP7hCE+1cftujNiVt1wNpVEJYsBmYiIKAYnBYt0bvtm18XUN998gwsvvhRffb4ZJ055ALlFp8Bf34RF6/yYMMSHlZv2RIXP4lM6O+LOiJkXRE6axXc6BmQiIqIYnBQseJs8Pp9++ilKS0uxdcdOdLtyJnKLTgn9rCkQxMpNe7C6YnjU65xyZ8TMCyK7Z/HTCQMyERFRDE4KFk6azXa6//73vxg9ejSEEOh+9VzknnhG1HOcfmFh9gWRU4K/0zEgExERGeCUYOGk2Wyn++abb1BYWIhly5ZhyqJtMS8snNgjmBdE9mCbNyIiojSSKW3frPTll18CAMaNG4cPP/wQZ5xxRsw2fMnu9GdEIrvzZUsrRafhDDIREVGaccpsdiKsnKWVUuKee+7BHXfcgZUrV+Kiiy5Cbm4ugNhlMlYvfkx0sZ2TynuyCQMyERERpYSVLepaWlowbdo0zJs3D5MmTcLQoUOjnhMZNpUNMsoG+yxf/JhMAE/nC6J0xRILIiIiSgmrdnI7evQoJk+ejHnz5uG3v/0tnnvuOeTl5UU9T6+Mwuqd/th9JL1wBpmIiIiSYrRswqqQuGDBAjz//POorKzEbbfdBiGE6vP0Arra4kcBYFi/oqTGptBabOcSAn0qlqGT1wMhgPrGAMsoHIABmYiIiBJmtGyius4Pl8lbOEspIYTA5MmTcdppp+HCCy/Ufb5eQC8b7EPt1/sxf+1WKCOUABat86P4lM4oG+xLqH5aeY2/vgni2DHDKeejvikQeixddkfMZAzIRERElDCtWdk/vLgBty5Yj4J8Dw4HgmgKtKi+PtGODF988QWuueYaPPXUU+jfv3/McAzEbpm2ctOeqAAbXgISb/105MWDBEIh2a1xsRD5vgzI9mANMhERURpLpHWYmcfTmpUNSgkJ4EBjQDMcu4VIqEXd+++/jwsvvBCfffYZvv32W8Ovi9UyTW+GOZH6abXXSLS25mvRCcfh70v24AwyERFRmjK7K0Qix9OalTWiRcq4x/nWW2/hiiuuQOfOnVFTU4N+/foZep1S6tAUCIZmb30RZRJ6M8zx1k9X1/k1z4tSohHrvGXKZiBO3IAlFs4gExERpSmzu0Ikcjy1WVmj4g2Aq1atwqhRo9CnTx/83//9n244Dp8JHzT7DZS/tCEUSINShmaOw4Oa3gxzPF0ulAsNLUpI1DtvsUpPzL5zYJVUbMBiBQZkIiKiNGV2V4hEjhe5s59bo4NEpERqj88991xMnToVq1atQs+ePTWfFxnK6psCCATbljSEB38lbN66YD3yclwozPdE7VIYz452ahcaka+JPG8FXo/q+xr5fE4OnVa19rMaSyyIiIjSVKxFZ6k6XvhGFpFlGmoK8z2YOeYsQ7fZpZS4//778fOf/xyFhYW45557Yr5GL6CG21HfFDXe+qYAvB435k0a1GZ84ZuM+Oub4BaiTdALf67eBUV48E10AxCrd/0zU7r2f+YMMhERUZqKZ1YzVceLnBktzPegwHt8ZvS+SYNQd+cIQ0EuEAhgypQpuPXWW/HMM88YHoPR8FWQ74lrhjN8JlnpQKE2e6t1QeEr8JoSYNMpdFq9AYtVOINMRESUpiK3Tk52AZRZxzNja+SGhgZMnDgRy5cvx1133YWpU6cafq3RhYOHDjfjQGNA9Wdarzcye6u26UgyFy6RzL5zYCWrz4VVLA3IQoiRAO4H4AbwuJSyMuLnvQA8DaDg2HMqpJSvWTkmIiKiTGJGGNU7nlKfm8oOBHv37sXll1+O9957D7+e8Ve87inGk9NfM/z+5aV9ceuC9VE9jSMFWrSfoVVLHWv21ki3jGSlU+g0+yIuVSwLyEIIN4AHAVwGYDuA94QQS6SUH4c9bQaAF6WUDwshvgfgNQC9rRoTERERGWd2GznlmLHC0pEjR1BfX4/bqh5F9QEfmo6FT6Pvr7YrXry0NvHQm72NPF9a3TKSZVXotKodm9kXcalgZQ3yuQA+l1J+KaU8CuAFAOMiniMBnHDs/+8EYIeF4yEiIkpaurTXMoPZHQhidV/44osvEAwG4fP58OGHH2LV0T4Jv/+csgGYN2lQzO4aWo/7NMoVtNqzNR5txqwlH6WsY0PZYB9WVwzHlsrRWF0x3JRwnC6dMVLByoDsA7At7N/bjz0WbhaAyUKI7WidPf6N2oGEEL8UQtQKIWr37NljxViJiIhiyrYQYfZiML3A/e9//xvnnHMO7rzzTgBATk5O0u8fHiLvvWqg6gLEH593clwLE5VFiAVeT5vHDzQGUN+kXs/sxMVzkdK1HZtVrAzIapdkkfcrfgzgn1LKkwCMAvC/QoioMUkpH5VSFkspi4uKiiwYKhERUWzZFiLM7kCgtfDt03ffQmlpKXw+H371q19Z8v6R3TWUXsNzygaoPh6rhKN9nvEqVZcQjr/jkE6dMVLBykV62wGcHPbvkxBdQnE9gJEAIKX8PyFEOwBdAey2cFxEREQJybYQkchiML06VmXRWrjv6l7D/jcexoUXXoClS5eic+fOSb2/Hq1a2ERqZOP5nUe2hFPe00nSqTNGKlg5g/wegDOEEH2EELkArgawJOI5WwFcAgBCiP4A2gFgDQURETlSuvZ0TZTarOuEIT5U1WxWnRFVK0Epf2kDBs1+A30qlkWF4+Zv9+LAiifgPX0o3nzzzTbhWOv9Y83uporW79wVdv9crbzZ6B2HVNe6m91TO90JqbFK05SDCzEKwH1obeH2pJTybiHEXQBqpZRLjnWueAxAB7SWX9wmpXxD75jFxcWytrbWsjETERFpUdslzutxOya0WdWFIPz4ep+/pHKFof7DUkqIY+nx6K4vkFvUG/f9eIgjzqFRRnYM1CIAbKkcHdexU/E9s/r74wRCiHVSyuKYz7MyIFuBAZmIiOzk1BCRilClFYB9BV6srhiOPhXLYrZVawkcwd6lVfCeWoyOg0ZGHSOdVNf5MXvpR5qbjWiJ9VljnWdKnNGAzJ30iIiI4uDUnq5GdnhLVqwa7Fg72AWbvsOeRX/GEf8n8PYebOjYTlY2uLXcJJ6AbKRsIdtq3Z3IyhpkIiIiSpFUhKpYNdhaPYIBoPnbPdg1/3Yc2fkpuo67HR3PaVtikK513EbOr1KKbLSGOttq3Z2IAZmIiCgDpCJUxVrIFbmorjDfA49LoOVII3Y+exuav9uLnpPuQsFZP9A8hpWsWPhm5PxKHC+PMDKbzwVz9mMNMhERUQZI1cKueGuwledv+teLOPl7QzBryigA5m+TbGTcaovqCrwezBp7VlJbZxtZrBdrYZ7acZ1Y657uuEiPiIgoyzgtVC1ZsgSdO3fGRRddFPdrzf4seh02BIBrzu+FOWUDEhoXcDzwu1R6PQNcYOcUXKRHRESU4dTCmlNC2OOPP44bb7wRl112GV5//fW4Xhs5K2vGBht6tcISwPy1W1F8SueYs+Fq45o7fkDovGvN5LM8Ir2wBpmIiNpI9QYFlBi1TTmmv7zR9t+XlBJz5szBL37xC4wYMQKLFi2K+xhWbOkdq1ZYHnvfZMfl5M1NyDjOIBMRUYgVM3dkvuo6P/7w4oaoW/lmt3WLVzAYxNSpU/HQQw/hZz/7GR5//HF4PJ64j2NFRw61basj+eubUFK5QrN8QqsoNXJcTm0FSMYxIBMRUUgqeulScpSLGLU6VyB1vXLVyjvGfL8H9uzZgyt+/mt81ncCzvzTGwnVD2v1U06mI4fy/nobewgg9L7++iaUL9wACCAQ1F+vxfZrmYcBmYiIQrhBgfOpXcSEMzusaS1KC5+N3bZrL6b9cwcwZRgm3XYPKhZ/iMDBwwCOBc2XNgAwfhdCbbbXjDpeZWZ3RvVGzF+7tc2MsACiZogDLbEbGYhj43UKpy3UTFcMyEREFGLFzB2ZS+9ixezFYFolN3k5rtBjzd/tw+6FMwEh8Lfu/0BTs4yacQ0EJWYv/chwUFOeZ1XQKz6lM17d8A3qm1pnkgvzPXFvF62QcE75EUukzMOATEREIVbN3JF5tC5i3EKYvhhMq+RGeSywbzt2vXgnWg5/h6KyO/DNt0c163TjDaBqdbxmzI6qdZk4HGhBgdcTCszx8Nl88Rh+TtRazLFEKjEMyEREFGL1zB0lT+sixopOCXqz1Ud2bMbul2YDwoXuP56LvB6na4b3RIWHv05eDxqONodmpxOdHdUK/e08Lng97pgbfoSz++IxMuzbXZeeSRiQiYiojWxage+kek2jY0nlRYxW4C3w5uDTlU/Aldce3a66C57CE0NhcdaSj1RnYgu88XWziAx/asdMZHZUKyzWNwYwb9KgNudVL+z7HHDxGKseXcESqfgxIBMRUVZyUr1mvGNJ1UVMeWlflL+0oU1NcY5LYtbYs3Hgwmfx0L+/wN6gNyqkly/c0GaBm8clcPnAE9u0UBvWrwgrN+3RDPlGw1+8s6N6dfaR53XwXW+oloYU5nscsSGLkc9u9yx3umJAJiKirOSklnZOGktkWUPwWNCVUuLb/y5CwP8JglcswLWXDUZh126h5yqbZajNcA/rV4RF6/xtLgCeXbs19J7hFwTKa42WasQ7OxpPnb1GxYLm46mmV4/eIqXtd0XSGQMyERFlJSe1tHPKWLTKGqRswYEVT+C72leQ3/9/cE/NJrhzcnRnvcNDWUnlipizwU2BIGYv/QiHAy2G64ATmR2Np0TloMaiPa3HU81IPbqyM6YTyojSCQMyERFlJSe1tHPKWNRmsmVzAHtfm4fGT1ahY/E4FA6/HjsPNcc162006MfqdOFxCXRol4P6xkBSYc9ohwyn/F60xAr7TiojSjcMyERElNG0Fr85qaWdU8aiFmSVcFxw8RSccO4ECCHQs8Ab16y3Gd0trFwUpxUkJwzxtSkNAZxX06tXj+6k0p10w4BMREQZy8gMmlndIJLpiOGU9npqQfaE4nHwnjoEHc6+BMDxgKhVJ6w2u6p2ARDJ63EjL8el2q3CV+C1dFGcVpBcuWkP5o4fYPvvJVFOKd1JRwzIRESUsWLNoJnVDcKMW9lOaK+nBNlvd29D0+fv4YSh49DhpH7ocPrZqmUNarPew/oVqXaraAoE4T62kYVPo4uF1jGtnrHVC5JO+L0kyuklIk7GgExERBkrVTNo6XYrW2u2u2ywD198/AGm33cbgsEWnHZBKf444XzD/ZhjdasIShkKvHrnJdUztpkaJJ1SupOOGJCJiChjpSr4pCqIW7HVcvhsd/u9H2PWr65Czy5dUFNTg7599YNUot0q9C4cIoN3ZPs4s1XX+dFwpDnqcY9bpH2QdErpTjpiQCYiooyVqhm0VARxszoSaM123/bXh/HVy39D//79sXz5cvTs2TPuMRq9INB7Xio7L0S+VxsO6XWcLCMlIk7aUdIpXHYPgIiIyCplg32YO34AfAVeCLQu9grvEWuW8tK+8HrcbR4zO4jrlXHEQyucHjjUhJKSEqxatSqhcAwYvyCQaJ1trq7zR/3MrM+pRekL3KdiGf7w4gbNGe9AizTtPZ1MuUjw1zdB4vgFidrvJptwBpmIiDJaKhZZpeJWtlllHOGz3VJKBPZ8hdxufXDmRaPxr9uq4HIlPndmpFuFQmtm2MpylcgZ42CMLfGyodtDutXPpwoDMhERkQmsDuJmlXEoIbbx8BHse/0BNHyyCn1++TDKJ/0oqXAMRF8ouI51rdCiFsRifc5kygHUwqCedF+kZwRbwaljQCYiInKo8DBYkO+BxyUQaDkeOBPdarmpsQE3XTcZDZ++h5Mvuxb33jDStHAffqHQp2JZzOdHBjG9uvFk65PjCX3Z0u0hUzt4JIsBmYiI0k42LCqKDIMHGgPwuAUKvB4cbEp8q+W9e/fivt//FN9+vg6PPfYYbrjhBiuGD8DYDnqRQUyvXEWtS4ZWOUA8W0cr/ZnD+zRn4ndKDVvBqWNAJiKitJLKLgd2UisHCAQl2uflYP3MEQkf9/HHH8cHH3yAxYsXY+zYsckOU1esmmS1IKZ38WO0HCDeraOtWLiZLtgKTh0DMhERpZVkFhWl08yz2bWhwWAQbrcbt912G8aNG4f+/fsnMzxDIsNXJ68HgWDkClX0AAAgAElEQVQLGo62/v7yctrWPMe6+DFaDpCpW0dbJZ13C7QKAzIREaWVRINjus08m1kbunLlStx0001Yvnw5evfubSgcJ3oxofa61RXDQz9TzjkA1DcF2vwOYl38DOtXhPlrt0a1KG440ozqOr+hmeZkw2Dk51PbMtuJ3yeKD/sgExFRWtEKiLGCo9X9dc1mVm/lhQsXYuTIkXC5XHC73bFfgMR748Z6XazfgV6wra7zY9E6v+r+HUrQVt4n0e9ILGqf79m1W9lDOAMxIBMRUVpJNDimWzsrMzY5efDBBzFp0iQMHToU//nPf3DyyScbel2iFxPJBGBAP9jGatEW/j5WbdxipE2cky+6yDiWWBARUVpJdFGR09pZGSlhSKYc4JlnnsEtt9yCsWPH4oUXXoDXa/xzJnoxYSQA6/0O9Doq3LpgveFxW7XwzIyttCk9MCATEVHaSSQ4mtnOKtnFfqmoh77iiiuwfft23HbbbcjJie8/94leTCQTgAH9YFtVszmulnFWLDwz0rYuchxa0mnBaDZiiQUREWUFM0oWgMTrc8NZVQ/d2NiI6dOno6GhAR07dsQdd9wRdzgGtEsUhvUrQknlCvSpWIaSyhVRnzlWaYPe76C6zo+SyhWhmeJ5kwZhdcXw0O9H7dha72OVWGMwOg4zvkNkLc4gExFR1jBjVjGZNnMKK+qh9+3bhzFjxmDt2rUoKSnB5ZdfnvCx1GZyh/UratNDWG3W20hpg9rvwMiMeuSxC/I9kBIxN00xc6ZW67zE28XCjO8QWYsBmYiIKA5mhFu9UoREAt22bdtQWlqKL774Ai+++GJS4VgRGWSN7mKXyEWI0cAY77GtKGUx4yIr3RaMZiOWWBARERlUXeeHSwjVn8Wz2E+vhCHy1nv5SxswaPYbmmUNH3/8MS644AL4/X7U1NTgyiuvjPtzGWFlqIv32Eo5htY5UTi1tZ9VbejIPJxBJiIiMkCZjQzK6E688da/apUiaG0vXd8UAKA+A5qXl4eioiIsW7YMAwcOTOizGWFlF5B4jq01K1z79f6oUgenztSauWCUrCGkyh+6kxUXF8va2lq7h0FERFmmpHKFaohzC4F7rxpoSu1on4plqhthRPIVeHH/pSdgyJAhEEJASgmhMbNtlshgCrSGukQWOiZzbK3fgwDanDuvx412HhcONAainusr8IZ297MLu1jYQwixTkpZHOt5nEEmIiIyQGvWsUVK04KN0TZim/+9GOf98SE88MADuPnmmy0Px4A5vYW1QmE8x9b6PUReWDQFgsjLccHrcTtyptaKNnRkHgZkIiIiA1Kx0YjarfdwUkocXPMCDr4zHz/60Y8wZcoU097biGRCXawFc0aPbfQiAmjtcDFv0qCEQz1nebMXAzIREZEBqagbVWtlduhwMwItErIliP1vPoJD65dj2JiJeGXRfHg8HtPe22pmtTZT+z1EllcoehZ4Ew71qdjMhZyLAZmIiMgAq7YvVnuf8GMqs5hbNn+Iho1v4oopN2HRk/8vJWUV4ZKdTdWa9Y13wZyRHs1A8hcv7FWc3RiQiYiIDNKajdQKj2bcor98QPdjrxmOT6ePxJlnnmnSpzEu2dnU6jq/7ixvvNR+D8WndDb14sWpHTAoNRiQiYjIMdKx5lOv7Visnedi8fv9GDVqFKZPn46rr77acDg24zyGH8MlRFR7u3hmU6tqNquGYwGYVqJi9qK3VNSck3MxIBMRkSOka82n1q3459/dllSo3LRpE0pLS7F//3507drV8HhmVG/E/LVbQ4E0kdneWUs+CvVeBqDa+xkwPpuq13nCqb9b9irObtxJj4jIRkZ3BMsGTt31LBat8JdMqFy7di1KSkpw+PBhvP3227j00ksNjaW6zt8mHCuMnkflIiU8HOsxOpuq9Tyfg2djywb7MHf8APgKvBBoHasZPZ8pPXAGmYjIJuk6Y2qVdK351LoV71YpS1CeHym8nKGzPIgPH7geJ/t8qKmpwWmnnWZ4LFqlDICx86h2kaIlntnUdJ2NZa/i7MUZZCIim6TrjKlVtGYZJeDo2fXy0r7wetxtHvN63PjxeSerPh4ZCpULJX99EySAfaITCi++DjMeeSmucAzoh2Ajs71GL0binU3lbCylG84gExHZJF1nTK2it0mGk2fX9dq/GemsUFWzGY1Hm/Hde4vR7pSByO1+GtoNHIXHavdjirHKihCt2ezwxXB6C/iMbMKhhPx4fw+cjaV0IqRGjZRTFRcXy9raWruHQUSUtJLKFaphxFfgxeqK4TaMyH5KeNMKaZl4bnrfvhT7//UYvlu3FB2HjEHnS28E0Bpqt1SOjutYkWU7ynEuPK0zvtrXBH99k2q7tcJ8D2aOOQsAdHfyU2Ti74GygxBinZSyONbzWGJBRGQTrVvzTq/LtFLZYB9WVwyH1hYYmTa7fuTIERx6/e+t4bh4HAov+UXoZ4n2B44sZbjm/F54f+vB0EWH2rTYgcZAaIY+/PVaMu33QBSJJRZERDZJ1c5s6SgbetAeOnQIZWVl2PfBv1F0yfXwDikL7Y5n9EJJq1wi/DtUUrnC0MI7pf59dcXw0Ou17nJk0u+BSA0DMhGRjViXqS5dux7EIy8vD/n5+XjmmWfQ8ezhcV8oGe2CEs9sb+Rzs+H3QKSGAZmIiDTZtbNdJs+uf/755zjhhBPQrVs3vPLKK6FZ43g/m14XlPBjGVl4F/7ccJn8eyDSw4BMRESq7O7TnImz67W1tRg1ahSGDBmC5cuXh8JxIox2QdHrDhJOa2Y4Vb+HdNxmnDIXF+kREZEq9mk21xtvvIGLL74Y7du3x/3335/08bTqgNVmgSMX7t03aRDumzTIMX2JI3tBKxdjTu19TZmPM8hERKSKfZrNM3/+fEyZMgVnnXUWli9fjhNPPDHpY8ZTH6w1C+yUGVqj5SJEqcKATEREqrKhk0QkK27zHzlyBHPmzMFFF12E6upqdOrUyZSxZlJ9MC/GyGkYkImISFWqOxjYXYNqds11S0sLgsEg8vLy8K9//QudO3dGu3btTB1zptRpZ+PFGDkbAzIRUZLsDnZWMXOGMtY5sntBIGDubf5AIIDrrrsOUko888wz6Nmzp5lD1ZSu30W2kyOnYUAmIkqCE4KdlcyYoTRyjpxQg2rWbf5Dhw7hyiuvRE1NDebMmZNUp4pYwgNxJ68HDUebEQi27pWXTt/FTCoXoczAgExElAQnBDunM3KOnFCDGs9tfq2Z2t27d2P06NF4//338fjjj+P66683fZzKe/vrmyBwfOvo+qZA1HPT6buYKeUilBnY5o2IKAlOCHZOZ+QcGW1ZZqXy0r7wetxtHlO7za/Vkmzx+9sxevRofPjhh1i8eLFl4Vh5b+B4ONbD7yJR/DiDTESUBLsXFzmh5jTWGIycIyfUoBq9za81I37PG5+iqqoKHo8HJSUlloxR7b1jUc6zE74rROmCAZmIKAl2Bjsn1D8bGYORc+SUGlQjt/kjZ2Sbvt6AwN6tEEPG4OKLR1s5vLhng5Xz7ITvClE6YUAmIl2cddKnFewAoKRyhaXnzQn1z0bGYDT8pksNakG+BwcaW+t9Gz75D/YuuxeeQh9OPv9yy99bazZe4XEJdGiXg/rGQJvzXFK5wvbvClE6YUAmIk2cdTImMtil6rw5of7Z6BjSJfzGUl3nR/2xcPztuqU48NajyDupP4om3AmRk2v5+6vNxisL9Xw6F2JO+K4QpRMu0iMiTXqzg6QtVefNCQvbzBpDdZ0fJZUr0KdiGUoqV6C6zm/G8EylXPhIAPX/eRYH3voHvGech25X/Rnudh1wUKWLhNnKBvswd/wA+Aq8EGgNxfMmDcJXlaNRXtoXVTWbVc+hE74rROmEM8hEpImzTolJ1XlzwsI2M8aQLncqwi983O0L0GFgKTqPuAnC1dr5IlVhU202PtY51Po9DetXZHkpEFE6YkAmIk12d2hIV6k6b05Y2GbGGJxQS23E9j0HcHTP18jr2Rcdz7kcUsrQJiB27/qmdQ7/8OIGAOq/p2H9irBond/xFyZEdmBAJiJNTpihTEepPG+J1PaavfAy2fpiJ9ypiHVO9u3bh/0L/4SGXV/D96vH4faeEArHbiEwd/wAW0Ol1rkKStkm9IaPMdbCPS7QpWzGgExEmpwwQ5mO9M6b3aHDSeUMyrnQ2uwilb2kyxduQKDl+BbN5QuPz7xu3boVpaWlOLJrC3qOLYfbe0LotV6P2/ZwDOh3t1Bmkm9dsL7Nd07vwsTO74ndfyNEACCkNLIPj3MUFxfL2tpau4dBRBS3yNABpD5glVSuUA1SvgIvVlcMT8kYAPVzES6V52XQ7DdUt2ku8Hrw7ISeKC0tRUNDA1555RUcOOF0R4a3WOcznHJule2qI/mOXZjY8T1xwt8IZTYhxDopZXGs53EGmYgoRZxQa+uEcgZAf0c4tXZlVs4qqoVj5fERN87E7m8P4+zr78GBE053bLs6ZUx/eHEDgjEmvpTvnF4p0K0L1qu+1urviRP+RogAtnkjIkoZJ4RTp7T70vvMO+qbUFWzOdSmTJlV9Nc3QeL47X4rW8HJ5qMAAE/Jz9HjZ/NQ3+5Ey98zWWWDfbj3qoHwetwxn7ujvkm1ZZwyU2vX98QJfyNEAAMyEVHKOCGclpf2jQpQdiy81PvMkSHY6r7ShfmeNv/+bv1y7HjyZgQPHYBwuZHTsYvp72mVyNDrPraQMJJy/ssG+7C6Yji2VI7G6orhbbYHt+N74oS/ESKAAZmIKGWcEE71Zg1TSe1cRFICqdWzijPHnAWPW0BKifp3nsP+mgfhKfRB5EaHMr1tnp0iPPSqzSgb+c7Z9T1xwt8IEcBFekREKeWkFfp2jyX8/bX+SySg3aHBzAVji2q34uabb8au/76KonNGoP0lN0G6opfpuIXAF3NHmfKeqWL37znecThlvJSZjC7SY0AmoozE/8jqc1q3AL3uGlqLycwc68yZM3HXXXehoqICf/nLX9Bn+muaz/2qcnTM4/H715bTvm+UvYwGZJZYEFHGsWNRV7qxuq43Xnq31lNxu3/q1Kl46qmnMHfuXAghQq3OImk9Ho7fv2hO+74RxcKATEQZh/8xjs1p3QJihWCtxWTJ2L59O37961/jyJEj6NKlC6ZMmRL6WTK1sGZ9/6rr/CipXIE+FctQUrkirQO2075vRLGwDzIRZRz+xzg2rbpeO7sFJNpjOJHa1oKju7H9+Rk40vAdbrzxRgwaNChqLEBiu0hqLeSLZ4Gfk3Y8NIMTv29EehiQiciRkqnh5H+MY9PbJCKdGA2S4c874v8EH7x0F4Q7B397bGFUOFYkGtjdQqhu1uEWwvD3OtM2zMiU7xtlD5ZYEJHjJFvDyVZRsTml3VuyjJYzKM9r+nIddr0wAy5vB3SfXIX//UyYXsagtZNdUErD3+tMuwuSKd83yh6cQSYix0l29iyZ2+PZxKnbJsdDKzBG3kFQnufu2AV5vv7oOmYa3O0LcKAxgAONgdBrzChj8GncwXALYfh7nYl3QTLh+0bZgzPIROQ4ZsyeWbGoi5xHKzAKIDQzK6VE/p6PIKVEblFvdL96DtztC1RfZ8ZiTq07GFozy2rfa94FIbIXAzIROQ63myWjykv7Qm0zZYnWOwjBYBBTp07Fx0/ejuCW9wwdM9kyBq1yAq0WcWrfa5YkENmLG4UQkePE2lQgGzZhyIbPaJbeFcvUf9AcwLlbn8PChQvx+9//HiU/+R3uffOz0DltONKM+qaA6kt9FpxzbpZBZD/upEdEaU0rIGZDyMiWz2jWBYDaLnwtRxpwcMlf8O2XG1BVVYVp06apjiHyPIcTaJ2JNjMs88KHyF4MyESUkfS2JF5dMdyGEZkv0z+j2RcAasdr2boeOxf9GU88/hh++tOf6r62qmZzzB7F6XCBwvBNFBu3miaijJRp7a/UZPpnNHunw/B6XRk4DF+BFw+UT8FXW77UDcfKa1dXDFetYzZrfKnA7a2JzMU2b0SUVjKx/VUkp3/GWDOVeuUxerO1yVwAlA32wde8A+PGTcYfH38co+KcOdU658mML5Uzupm2sQiR3TiDTERpJRvaXzn5M8aaqVT7efnCDTjrztfxuwXrdUNozwIvquv8CW3cUVNTg2HDhiEvLw+nn356m/EaOZ7aOVcbn1GpntHN9LsORKnGgEyURhIND5kkG9pfOfkzxiqPUPt5oEWi4aj6QjiF1+PGsH5FCYXKZ599FpdffjlOP/10rFmzBmeeeSaA+EJq+DkHEFVyEe8FitllJLGwNSKRuVhiQZQmIhcimbXrVzrKhh25Uv0ZjZYDxJqpTGTGUukSYbRMIHysHQ5+iQ8fmYphw4Zh8eLF6NSpU+h58ZYdhJ/zZMsjUj2jW17aV3XhoxPuOhClI0sDshBiJID7AbgBPC6lrFR5zlUAZqG1m84GKeVPrBwTUbpijaFzObl7gJGxxXPxVZDvCW3NHM7rcaGkcgXi7YsU3pnj1gXrVZ8THiojx/rtCX3QY/Tv8Os//aZNOI58nZHHwyV7gZLqOnJur05kLssCshDCDeBBAJcB2A7gPSHEEinlx2HPOQPAdAAlUsoDQohuVo2HKN2xxtCZnDyzb3Rs8Vx8aXUGbQy0oDGB72L4DKeRUFlVsxmNhw9j/78ewwlDxsDT5WTknX0p7lv5FSaed2rU6+xa7JiqGV0nX5wRpTMrZ5DPBfC5lPJLABBCvABgHICPw57zCwAPSikPAICUcreF4yFKa07vbJBNwkOJSwgEI1KjU2b2jQbfeC6+DmrsPKelwOvR3K2uwOtpM47y0r4of2kDAsHj59PjFm1C5fZd+7C7ei4Of1WH3K694OlycmisM6o34vl3t7X5fSibfShSVXaQihldJ1+cEaU7KwOyD8C2sH9vB3BexHPOBAAhxGq0lmHMklK+HnkgIcQvAfwSAHr16mXJYImcjjWGzhAZSiLDsSJWy7BUMBp847n4MtIOTSEArJ85AjOqN2L+2q1RQXXW2LOiXxR5OsP+vXv3buxbOAOHd3yOLj+aig7fHxF2PBeeXbtV9XCJ7oiX7OxsrDKNZI/Psisi61jZxUKt73rk//TlADgDwMUAfgzgcSFEQdSLpHxUSlkspSwuKioyfaBE6cDJnQ2yiVooUeMWsbaesF4nr0f18cjgq9XibH/DkaiOKUbaoUW+z5yyAZg3aVDM725VzWYEWtr+ZyLQIlFVsxnbtm1DSUkJAvu24qSr7owIx240NbdojkMJx6srhscVjq1s02bG8Vl2RWQdK2eQtwM4OezfJwHYofKctVLKAIAtQojNaA3M71k4LqK0lQ3dG5zOaPjQmllOleo6PxqONkc97nGJqLsOZYN9qP16f9Qsb1OgNXSq3bpXZj4L8j042BhAZDyNLI0w8t3VC3xdu3bF2WefjWeeeQa72vWKmnn9ncYCv1jH1mL17KwZx2fZFZF1rJxBfg/AGUKIPkKIXABXA1gS8ZxqAMMAQAjRFa0lF19aOCYioqQYDR8+m0NKVc3mNrW8ig7tclQD2MpNe3Q7UIT38C0b7EN5aV/0LPDigEo4BoD2uervo0ft3B7e/hG65QXh9XqxePFiXHDBBaqvjTVjH29otHp21ozjO3lDGaJ0Z1lAllI2A7gFQA2ATwC8KKX8SAhxlxBi7LGn1QDYJ4T4GMBKAOVSyn1WjYmIKFlGSgziCSlWbf6iFbTqVVq06T1f7Tnh5QFa4l3MB0Sf24ZPVmHX839Ep40LQo9plSacf2qh5nG1fh96597qjTfMOD7LroisY2kfZCnlawBei3jszrD/XwL4/bH/IyJyPLXuBMP6FWHlpj1xL7aysgtBvLffjSy+U15rpA47kSAZfm43vbUA+1c8hv4Dh2LBE/8v9Byt0oSv9jVh8vm9orpYaC3Mi3XurV4Ua9bxWXZFZA3upEdEFCezQomVda7xBjC1Fmvhwl8ba7Y50SBZXefH317fhI+XPIKDa1/CecNKsXLZYni93lDHB60Qv6O+CXPKBmBO2QBD7xXr3Fvdpo0bexA5GwMyEZFNrKxzjTeAlQ32YdaSj1R7FruFCN26r67zq/Z+VsTbSk2hzOgeOrgfhz56Gx0GjkT9BbegZtN+AIgK+5GsqDG2enaWs79EzsWATERkE6u7EMQbwLTqhpUwrIRYtXDs9bh1619j9fytXLoBjUea4c7vhBN/Pg+u/E44HERoYaBeOE5kxtqKc89d7Ygyh5A2tyKKV3FxsaytrbV7GERESYusgwViB00rlVSu0CxhEGjdjKMxEN2zwi0E7r1qoG44VpsBLsz3YOaYs3DRyXnwff8i5J14Ojpf9uuo9wWim+grkp2xjjz3E4b4TKknV47HRXOkhhdT9hFCrJNSFsd6npVt3oiISIfTuhDodeiQgGo4BlpnmG9dsF6zC4fWor4DjQFMe/ItDBp6PgJ7vkS7UwZGPadngVdzVjfezT/CqZ37CUN8WLTOn9DmHXo1zUThrN6EhszBEgsiIhvZUYeqNXuljCPWphtqlP/Qly/cAKBtFw6tet+ju7dg+8KZQPNRzHnkBfzvV/maiwojZ2cFgGH9kttZNfLcl1SuSHjRJHe1I6O4RXh64AwykQNY1QuXSKF8x3pXLMOtC9Zrzl6VDfYltclJoEVi1pKP2jymNgPcEjiC3QtnAgC6/6QSd1w/HnPHD0Bh/vHtsfNyXKExTRjiQ/hWIBLAonV+U/9Wkgm5VvdNpszBi6n0wIBMZDPebiOrRW7sEVnP2xQIYvbSj0LPbTgSvUW1osDrCZUlaInshKFWuuHy5KHLqFvRY/I96H1G/9Djh8PKOOqbArh1wXrMqN6outOf2SUMyYRc7mpHRvFiKj2wxIJMwQUHiePttuyW6N9OPK8zsrHHgcYAZlRvxKJ1fs3nej1uzBp7Vuh9elcsizlO4Hi5xawlH2HbmlcAlxsdB5bC22dwmxCpNk4JYP7arZqL9GJtbhJJ77wls3kH+xqTUVZvQkPmYECmpFm5G1g24O227JXo3068rzP6XYrchS6cWreIwnwPDqhsXR1eJqEYN6gn6qofxV1vPITC/hcC3x8BX2F+m2NqjVOv15JbCMMXC7HOW7Ihl32NyQheTKUHBmRKGmdAk2N1L1xyrkT/duJ9nZFtpAFohmMBYHXFcABtZ2A7eT1wuwSCLcdf53ELzBxzVpvXNzc34+abb8ajjz6Ka6+9Fv/4xz/g8USHaKPjjByzWuit/Xp/VLs2I+eNIZdSgd8z52MNMiWNM6DJYe1i9kr0byfe1+m1bzNCuViLrJevbwrAhdYZY6VVWtWVbfsht7S0YOLEiXj00Ucxffp0PPHEE6rhWBmnXm2zGrcQqqF3/tqtber6y1/aoLtNNRFROM4gU9I4A5oc3m7LXon+7cT7usjvWIFGaQTQOlscPo8cq0Y40CKRn5uDujtHqB7P5XLh3HPPxfDhw/Gb3/xG93OVDfah9uv9ujXH4bwet2a9dOTrA0HtI/J/q4goEgMyJY0LDpJn9HYbF0NmlkT/dhJ5XeR3TGuBnUTb2mKl1RoQ38z19u3bsWPHDpx77rmYPn267ucJN6dsAIpP6Rz6nusF5bnjB6CqZnPcZRmRGo40o7rOz78lIgphQKakcQY0NbgYMvMk+rdjxt+cWwjVmmOB6FZryvesk9cT1cINiJ6B/fjjjzFy5Ei43W5s3rwZubm5oZ8ZuchTwnx1nV930xLldWqbiBiZgVb7jPxbIiIAEFJjUYZTFRcXy9raWruHQZRyJZUrVGfKlO12ieJhtEWbosDrQcPR5qhSBY9LoGriwFCg/dOjL+Pjf94BtycXf330efTpe1ab0o5Dh5sRaFH/705hvgczx5wVOlZk8A0X/r2PDN3D+hXptqvTwr8loswnhFgnpSyO9TzOIBOlCS6GJDP54uwYoTZzDAAd2uWEAu0tlY9hx8uVcHfsgqKr7sJDG5uBDzaEArFW3bPiQGMA5S+1blWt17s5spxErUQpvEwjVjBX8G+JiBQMyERpgoshyUxadcztPK6YQTZc/bHnVtVsxoGNK+Hp2gvdJs6CO7+T7sI4LYGgDAVbLXPHDzBUhhL+nPBZZpdGeQn/lohIwYBMlCa4GDKz2L3gUquOufbr/Xh27dao57fPdaPhaPSM7omd2mH+qk/gr29C11G3QrY0w5WbXNBUxqNVUpTIeQoPzGrlGwLAsH5FCY+ZiDILAzJRmuBiyMyRzIJLM4O1WmlCVc1m1ed63C54PWgTKtu5gaP/eRzX/X0Nuk++B668fAio9ziOh/K5jF4QxntO1NrJSQCL1vlRfEpn/k0REQMyUTrh7kvpQy+0JbqDnl6wVo6bbHDWKm042BTAvEmDQu/RMUdi6+K/4eDH/8EJ546HyG0X9RqPWwASbWp/PW6B9rk5mjXNHreIOld6nynRi42Vm/ZEdbrgDqBEpGBAJiIyWazQluiCS61g/fsX18MtRCiIJtMCUK/WXblAm7/qE/zyZ1ej8esPUDjsepxw7hXq471yYGjcaiG3us6PWUs+CoXl8C4WythjjT/Riw0ueiUiPQzIREQmixXaEl1wqRXeWiTQErHoLNHZUCOlDb/77W/QuO0jdLn8D+hw1jDV44TXCmuNwYw7IokGXS56JSI9DMhERCaLFdoSXXCpFeriHYceI6UN7Up+jm59h8Hbe5DqMeJZPKrWw3jlpj2GS0USDbpc9EpEehiQiSirpKJ7RKzQphdC9canFupijSMRajO7//3vf/HII4/g0UcfRa+TfPB36Kz6Wl8c51StFCW8g4aRUpFEgy4XvRKRHu6kR0RZQ629l9fjNtRXNxXvY+R11XV+/OHFDap9fMOZ9bmq6/y444H/xab5s5DboTMeemEpOhf1MOU8au0OGSnWDnd2t8wjovRhdCc9BmQiyhqp3K47kdBmdHxqQVrpDnw9Cv0AACAASURBVHGwKWBaSKyu8+OmWffhm1fnwdP1FHSfOBsdCrti7vgBAJKffe1TsSyqk4QaAWBL5ej4P4AOhmqi7MStpomIIqSyc0EiC9CMji8V5QHVdX7ccPvd2Pfmw2h3yvdRdMUMuPLyQ4v/VlcMjzkbHmt8RmuqzV44l0wfaiLKDgzIRJQ1nN65IJ7xWdkTe0b1RsxfuxWeHqej/dmXokvpzRA5xzcAiXVBYTSAGqmptmLhXKKt4YgoezAgE1HWSKZzQSpuycc7PjPGFHmM/zmtAE889xLy+5Ygr2df5PWMfu9YFxRGA6jaTHi8XSwSwR7IRBQLAzIRZY1ESxPMvCWvF2rjGZ8ZY4o8xrZd+3DfI3/A4a/X48Qp9yO3+2lRrzFyQRFPADU6E27mBYrT7yQQkf0YkIkoqyRSmmDWLXkjodbo+MwYU/gxgg0HsPul2Ti660t0GfU71XDsFsJQpwqzA6jRiwGjIZo9kIkoFpfdAyAicjqthWTx3pLXC7XxMqNMQHlu4MA32PnsbQjs3YaiCX9ChwGXRj1XAPjxeSejqmYz+lQsQ0nlClTX+VWPO6xfUVyPx2LkvCkh2l/fBInjIVptjGWDfZg7fgB8BV4ItHYJMbvVHxGlN84gExHpqK7zQwCq7cjinRE1s/bVjFla5RhHv/kULUca0P3qu5Hn6xf1eQWAC0/rjEXr/IZKOlZu2qP6flqPx2LkvMU7o27lIkciSn+cQSYi0lFVs1k1HAsg7lvyWuE1nlBbXecP9UsWET+Lt0zgV+d3g8cl0P57P4Tvl48iz9cPHpfANef3ajO7Om/SIHy1r8nw7LfZi+CMnDcuvCMiM3EGmYhIh1bAkoh/gV6yta+RtbgSCM32GtniObxGN/fr/8NXr9yHoomzkXNiP7jadWh9kgCKT+mMOWUD2rz21gXrVY+pdn7MrkE2ct648I6IzMQZZCLKCsrMa6z62UhaAcuXQPAyUvuqN061MgIJoDC/tUfxrQvWa3628Brdg7Wv4NMX7obo2geuwpPaPC8QlKqzwvHMfpeX9oXX427zWDKL4IycN7Pfk4iyG7eaJqKMVl3nx6wlH6G+KdDmca/HbWhhltq2zvHM2sY7VrWZUmWcRrdmVl4DHG8Z5xICzS0tqH/7aXz77kvwnnkBisaUQ+Tkqh4j8rPFGpvaZ9HqKBH5OynM92DmmLNM2Rqb20cTkR6jW00zIBNRxlILdeF8BV6srhhu6DhVNZtDdb/h/6tpNGgbodQWa41T6+dqCrweNBxtRiB4fLQNH7+NvUur0GHQSHS+7NcQLrfOEVovBK45v1eo3MKsjUnKF25AoKXtf3s8boGqKwcy0BKRpYwGZNYgE1Hc0mWmTq0kIZzRBVxKxwO1gGrmFsWxFpoZ2ZpZETljDgD5/X+Aru4c5J95IYRoXeKn1aEDxx6fv3Yrik/pHDoHyX7OqprNUeEYOF7a4cTvERFlH9YgE1Fc4uk3a7dYAdjONm1qYtX5qtXiej36/zMebDyI3S/PQfPB3RDChfZ9S0Lh2OtxhzpWaJFAQn2ateidK6Oz40REVmNAJqK4mLnZRbhEF9Hp0QvAiSzgMqNNmx4jC83KBvuwumI4tlSORnlpXzSrzMZ6XK0BuPngLuycfzsOb3kfgX3bQj8PX+g2p2wAVlcM1w3JZrZK0ztXAnDkhRYRZR8GZCKKixWzqFbNSqsFTqB1UVgidcNWd0qId4e3qprNbWqMFR3a5SDv4DbsfLYcLQ0H0G3Sn+E9dQiA1tpkJVyH74o3rF9RVF9lRSIXAFoXPOWlfUMBPpLZs9VERIliDTIRxcWKfrPx7oJmlPJas+qlzT6e1nsYPZ7WRcmuLz/BwUV/AkQuul/zV+QW9QbQOrM8a+xZUYsX/fVNWLTOjwtP64w1X+yPWoQY7wWA2vEjd937XRx9lYmIUo0BmYjikuxmF2qsrO01e0thJ21RrHWx0qvPaTh1zOUYNvl3+OcHh6LCfEnlCtULkq/2NWHepEFJXwDEuuApG+wLdQVR+0xERHZjQCaiuFgxi5qNu6CZ0Qkk8mKlYdM76Nz3PFSMHYqywZcDAH4xKvp1ehckZlwAGLngseJCi4jILAzIRBQ3s2dRsy0sGSlBMEJ57qwlH+KrN/6Jg2teQM7wKcDVQ3Vfp3VB4hICfSqWtQnsiQR5Ixc8qShXISJKFDcKISJHSJfeymaItSFILNV1fsxe+hEONAYgW4LY/8ZDOLShBu0HXIYuI29Bfl6u7uK+WBuoKPI9LgSCsk3fYo9LoEO7HNQ3BjR/T/HuukdElCrcKISI0oqTanutlkzNdXWdH+UvbUAgKNESOIK9S/6Gps/fRacLJqHTDyZDCBFzgWPk7K1LCARVJksaAy1RjwVaJA40tm5CojXzzdlhIkp3DMhEZKtsmjlWaJUgdPJ6UFK5QvdchLd2a2msx9Gdn6HzZb9Cx3Mub/O8WGE7/IKkT8WyhD9LUyCI2Us/ihpnNl3wEFHmYR9kIrJNOu3KZya1fsoel0DD0eaY52JHfROCjQchpUROp+7oecMjUeEYiG+BY7KLIQ80BjCjemNSxyAichIGZCKyjVW78jmd2oYgHdrlRG36oXYuCo7swjf//C0Orn4eAODKy486vtoCR72dCrU2VInH/LVbk7qwsWInxXR4byJyJgZkIrKNlf2PzWR2gFIrK6k/VtcbKfxcrF69Gp8/+XugJYj8M89Xfb7aLoEzqjfi1gXrNWenlcBemO+JOp7HLSC0ttgLk8wueHbeScjWuxhEpI8BmYhso3Vr30n9j2MFqHjDs1pYvXXBeng96v9zrJyLJUuW4NJLL8WJ3bvhjBvuQ263U1Wfn5+b0yYcV9f5MX/tVkQuwQufnVYCe31jAAVeDwrzPaGZ7aorByLqxRoSvbCx805CKt6bM9RE6YeL9IjINunQ/zhWgIrsZ1y+cANmL/1ItQ2aVliVUO8YoZyLnTt3YtKkSRgwYACWLVuGc+/9r+Z4I0NqVc1mzXzrr29C74plEDiegeubAvB63Jg3aVCbbhRqiwojJXphY+edBKvf26ye10SUWpxBJiLbqNXizh0/AAAcM+OmF6DUwrPSBk1ttlkvrEYSACYMae0E0aNHD7z66qtYsWIFioqKdINo5M+MBD292WXAWI2yEuYTmS21806C1e+drXX2ROmOAZmIbFU22IfVFcOxpXJ0aJOMeGpCrb59rRegjITP8DAUz6xkS0sQT/z1T1iwYAEA4JJLLkGHDh0AtAZWjzu6MNjjElGz72bM6qpdyEw+v5fqhU0i9bxqATxVdxKsfu90qbMnorZYYkFEjqI34xZrxzYrbl/rlYEYLT1QwpBW/+NIsvko9i69B42frsHGjWdj0qRJbX6ufDZlNz0AKPB6MGvsWVGfW238RkQGayN9jUsqVxj+3UUeG7BnYxGr39vItttE5DwMyETkKPHMuMUTphMVK0AZCZ9KGDISVlsOH8Lul+fgyLYP0eWSX2DOnDmaz83P1d/yWWv8DUeaUd+k3jUDSHwGNZnZUjs3FrHyvdOhzp6IojEgE5GjxDPjlqrb11oBKjJ8dvJ60HC0uU0/4/AwFLnozR2xxXPL0cPY+VwFAvu2o+uYaWj/vYvbvJ/SbcJf39RmYV2smfPI8UfOvAMIHc+XxAwqZ0ujcdttovTEgExEjhLPjJsTApla+NQLQ2phu6RyBfz1TXDltkP+GRcgb9j34O0zGL6wzxEZarUW1hkJXlaFNs6WquO220TpRzMgCyF+r/dCKeXfzR8OEWW7eMKbEwNZImHoTNc32LJrH3K7n4aCH1wTenxYv6LQ/69WThLJX9+EksoVhsKuFaGNs6VElCmElOpNh4QQM4/9v30BDAWw5Ni/xwBYJaW8wfrhRSsuLpa1tbV2vDUROVCsGVunW758OS4fNx6ebqei+zV/hQjbts5X4A119uhTscxwizhAe9Feup8vIqJkCCHWSSmLYz5PKyCHHegNABOklN8d+3dHAAullCNNGWmcGJCJKFM888wzuO666+Du2hvdJs6Cu31h1HOUmmCjHTPCeT3uNttOq9UeRz6HiCiTmRmQNwEYKKU8cuzfeQA2SCn7mTLSODEgE6Uvp85eWj2uyONPG3EmPnvrOdx+++245JJL8N1Fv8Wuw9pt6b0eNyYM8WHROn/c7drcQuDeqwaibLAvVOusJpnFeXZz6veKiJzHaEA2skjvfwH8VwixGK3rQq4A8EyS4yOiLJNsz2KrQpDeuAD9elojY1I9/qINyF/5GiZNmoSnn34af17+KZ5du1VzjE2BIFZu2oO54wfgDy9uaNP5IpaglKHPo9fdI9Ee0naHU27lTERWiDmDDABCiHMA/ODYP1dJKessHZUOziATpSet2cvwOlstVpYGaI2rwOvBkeYWzfc0Oqbw48tgAC1Hm+D2noAe7V1Y88dSuFwu3ZldhQCwpXJ03LXICqUjRqz3MfL7UDihZCOZ7xURZR8zZ5ABIB/At1LKp4QQRUKIPlLKLckNkYiyiV7P4lizkHobgig/T3QGU2tcahtphLdSM7pJiRLeWo40Ys/iu9FytBE9Jt+DXQ2Ay+XSHUO4gnwPSipXaIZjIQC9+Q5lHOH9k9XojSXy99RwpNnyjVpi4VbORGQF7aK3Y451s7gdwPRjD3kAPGvloIgo82j1Ju7k9WD6yxvhr2+CxPFb5NV1/tBztMKO8ly918ZSkO+J52OExmIkmFXX+SEABBsOYNfz03F460Z0POdyCJe7zfmI1bfZ4xY4dLhZc/bX63Fj3lWDcN+kQXCHdcFQI9EakrVojUWZLQ4/11q78aUynGqNN5s3JyGi5MUMyGitOR4LoAEApJQ7AHS0clBElHnKS/vC63G3eczrcUMI6M4OA9phxy1EzNfqqa7z49Dh5qjHPW6BQo3grIzFSDCrqtmMowd2YOez5Qjs345uE+5Eh7MvgQDa9GpWOzdKiPUVeNE+NweBFvV5X1+BN1TSUDbYh3uvGhh1rEgSQGG+R/X3odVD2kgfZkUqw6nW9yrbNychouQYCchHZWuhsgQAIUR7a4dERJmobLAPc8cPgK/AC4Hjwa6+MfYspFYI0lqsZnQGs6pms2rwbJ+bg5ljztINXkaCmf9AI/a9dh9ajjSi+9V/gfe01rI3ibYLyNTOzbxJg/BV5WisrhiOgxoztQLA6orhusfSUt8YUP19aJVGGD2nqQ6nWt8rLtAjomQYqUF+UQjxDwAFQohfALgOwOPWDouIMoFabXHkwimt/r7hs5BaO7QZea0erdB3sCkQc1c4I7vG+QrzERj9eyDYDE+Xk44/rjI+vZ3t4t1SO/xYWovYehZ449pNT2sMhfke5Ofm2NpijVs5E5HZYgZkKeU9QojLAHyL1l317pRSvmn5yIgorRltv2V0u2itEJTMVtOdvB7VOloleMYKXlo/f/755/HWW2/hDzfNwh+rjya9FXZ5aV+UL9zQZrbb4xKGjmPWdtxax5k5Jnq3PiKidGdkkd5fpZRvSinLpZTTpJRvCiH+morBEVH6itV5QpHMLfJkXltd50fDUZX6Y4PBU8u8efPwk5/8BF988QVK+3U27/Z/ZL2E/lq8ELNKEFjKQETZxMhOeu9LKc+JeOwDKeX3LR2ZBvZBJkoPWv16lX6+qaLVQk6r9KAw34O6O0fE/T4tLS2oqKhAVVUVJkyYgGeffRbt2rVLaGyR2OuXiMgcSfdBFkL8GsBNAE4TQnwQ9qOOANYkP0QiSrXIQDasXxFWbtpjSf1ovHWzVtAr89Dsf6yxaDCWqVOn4sEHH8RNN92EBx54AG63fieJeHaAY69fIqLU0qtBfg7AcgBzAVSEPf6dlHK/paMiItOpBbLw7Y3N3qLXrNrXZOiVeZgd4CdMmICePXti+vTpEDF6Eccam/Jz5cKlIN+DAyrBnb1+7d/qmv5/e3ceH2V57n/8eycECIgE2YQoghsutRqNa1QWlYAIRtEKikvrKcdjrVUrFqtV6qkS9Xi09ihWxWpbF1RoREFjFRCKP5cgqKWCdZdQCyKRLUCW+/dHMvHJZJZnlmfmmZnP+/Xqq2Ty5Jk7GYTvXFz3dQPZKWwPsrX2W2vtZ5J+K+kba+3n1trPJTUYY45N1QIBJIebObaxzBCOxg89q5Eqr8mYn7thwwY98cQTkqQRI0bol7/8patwHGltoQ4/2bqjUXlBt020V1pqCZdllQs1ZNp8lVUujOmAFT8IdXhJrAfFAEAobsa8zZTk7EHeFuIxAD7n9p/jk/nP9qGmPCS74hfpfpGqxG7GtEXy2WefadSoUVq7dq2GDx+ugQMHxrTucGsLdfhJyENCXG7SCyeWFg+/cnvcNwDEyk1ANtaxk89a22yMcfN1AHwkXCALdZ1Xkh3Kot0vWptHvPNz3333XY0ePVo7d+7UX//615jDsRS+BcXtaXUNTVa/fn5V3AE/G8IlvdkAvOLmJL1PjDFXGmMKWv/3M0mfeL0wAMkVqqUgmNc9wm5HvyXrfpHaPNy0F4S6ZvHixTr55JPVqVMnLV26VGVlZXGtPdzaCgvc/LHcYtP2hnbtBVOfeVclt7zsqmUiG8Klm+O+ASAebirBl0m6V9KNajkh9VVJU7xcFIDkC9VS4OUUi1CSHcrc3C9cm0e0Snaoa66avVKN7y9Qzz57atniV7T33nvHte5wa7ux6n3VNzTHfb+GZtu2ma+2rl5Xz16pq2avVHGI19YPU0YS5YeNoACyk5uT9NZLmpiCtQDwWLqP5E12KIv3fm7aC4Kvadz8tTrt3kedDjtdXQ4bpeVf5ynBfNzBk29+GfZzsbRfBAR640K9AciGcJloHzkAhBNpDvJ11to7jDG/kzrO+7fWXunpygBknWSHsqnlQzX12XfV0OQ4gjk/8nSHqhW1YXuxnZXnwK+ttapb+mdtqXlOAy6+WwW999ZOdYq5V9fN5sSmCAc3zTj7sHZfv21nY8hjssMJfgOQLeEy3W/6AGSnSBXkD1r/n2PrACSFJ6EsOFNGOBw00DYRjrPyPLCoUGu/2apvqu/T1vde1m7fH6VOvb7bjBdLW4jbzYn5xoQMyfnGdAiCwfd0I3jNhEsACC1sQLbWPt/6/4+lbjkAsl0yQ9md1Ws6jEBraLb6+dPv6urZKzsE8EizoIMr2VeePEg/uuQCbf/nW+p5wkT1PPGCdjOOY2kLcTsxYtKxe7c7vMX5eLDgNxs9Cwu0bVdju2p6sEzqLwaAdIrUYvG8ItRirLXjPVkRALgUroobqMIGV2ojVX2DDzH5bOkcbf/n29pj1OXqUXJ6u2uN1KGNI1ILRaRDQapW1LZd95uKwyS19CI3Wat8YzTp2L3bHg8Wqqp8Z/Ua1dbVy6j9H+CZ1l8MAOlkbJieN2PMsNZfni1pT0l/bv14kqTPrLW/9H55HZWWltqaGro+AEhllQtdzXYuLirUsmkjw14f+LxTY2Oj9r74LnXZ+3sh72mktiAsKWRvdSB0R1qn87pk4ghmAOjIGLPcWlsa7bpIR02/Zq19TVKJtfY8a+3zrf87X9KJyVwsAMTDzWxn6bsKbrTjpVetWqXhw4frq6++UqdOnbTvYUeHvWdg9vDVs1fqhr907AV2zmOOtM5kHu/tVFFSrGXTRurTyrFaNm0k4RgAYuBmDnJfY8y+1tpPJMkYM0RSX2+XBeQmqn6xCe7DzQuzyS3Qextpk+CyZct0xhlnqLCwUBs3btSee+4ZcupGMCtp267Qnw8E88DzXjV7ZcTrAvh9AADp5SYgXy1psTEmcHreYEn/6dmKgByV7GOYM1E8wdDZhxtqskNw722oTYLPPfecJk6cqEGDBqm6ulqDBw9uu1b6LlBHGJARknNTXM3n34S9rmdhQduv+X0AAOnn5qCQl4wxB0g6qPWh1dband4uC8g9biYdZHNlMZZgGO7nEM8YuaqqKk2YMEGlpaWaP3+++vTp0+7zzvu67XmW2gfzqhW1ejzEdIqAb3c0tG3Wczvxwo1s/v0CAF6KGpCNMd0kXSNpH2vtj40xBxhjhlprX/B+eUDuiHZssleVRb+EKLfBMNrPwc0YOef33LfAatSEC/XsH+5T9+7dI37d1PKhunr2ypCV5MKCPO1qtG3TJyYc1T6wR6o+W6u27yFZx3FTiQaA+IXdpOfwB0m7JB3f+vFaSb/xbEVAjgo3ozbweKQAGa9AiKptbR8IhKiqFbVx3zNeboNhoj+HqhW1mvbsSn3w6tNqbmzQ+obO+mzoRP31w7qoX1tRUqwLjhskE/R4QZ5RY7Nt639uslZzlte2/RzdhNvA9xDt94FbXvx+AYBc4SYg72etvUNSgyRZa+ulDn8/AEhQtAkLyaosOvkpRLkNhon+HG5/4X19+ext2vTK77X9w9clxfY9/6biMN193hEqLiqUUcuIuN26dupwQIfznm7D7bq6+qi/D9zy4vcLAOQKNwF5lzGmUK0z540x+0miBxlIsoqSYs04+7B2wcs5HzdZlUWnSCGqakWtyioXasi0+SqrXOh5VdltMEzk51BXV6cVD03V9g9fV69Tfqzuhwxr+1xtXb3r7zN4hFrd9oaQ10UaLxfue4j2+8AtL36/AECucDPF4mZJL0na2xjzuKQySZd4uSggV0Xqnw01csxIGty7UGWVC+PqIR5YVBhy01nPwoK4+lcT6Wd2u8Eu3M9hxEGRp0+uW7dOo0eP1q51q9Vn3NR24Tgg3j7dcD/H4PFyv35+lTaFCdPONwPJOI471M+J0/QAwJ2wJ+lJkjHGSNpL0nZJx6nl76E3rLVfp2Z5HXGSHnLZjVXv6/E3voi44SuWk9nCjUXrWpAXMsiFOnEu2r28OCUu1M8h2nP9/e9/1+mnn65Lf3mHnqotijjbON8YNVsbNeRHO9o51HqcX5PfOre52KPNkX7ZgAkAfuH2JL2IAdlxo6PiXMRoSb+VlC/pYWttZZjrzpH0jKSjrbUR0y8BGbks1qOV3QgVosJNajCSPq0cG9Pa3Kwl1iAXy3N99tln2meffWSM0c6dO9WlS5d2ITWaSEE3VCXbtq6DMIpY8YYG8F7CR007vGGMCX/eavgF5Eu6T9IYSYdImmSMOSTEdT0kXSnpzVifA8g1bjdYxbIRK9SRxPH0r8a7KSyeSRrhgm3wcy1YsECHHnqoHnjgAUlSly5dJH33PRe76McNt4Ev1AbHQDjmaGfEyk8TZQC4C8gj1BKSPzbGvGeMed8Y856LrztG0kfW2k+stbskPSXpzBDX/bekOyTtcL1qIEe53WCV6EaseCYpxLspLNZJGlUrasOO0XE+16OPPqrx48froIMO0tlnnx3yereb52pbNy06JTolIrAJcvC0+drv+gUanKLNkPAnP02UAeAuII+RtK+kkZLGSTqj9f+jKZb0pePjta2PtTHGlEjaO9qhI8aYKcaYGmNMzYYNG1w8NZCd3AS6ZGzEimeSQrhQPeKgvhGnYcQaNMMdumFa12CtVWVlpX74wx9qxIgRWrx4sfr37+/q+8w34SdYBlfzEpkS4awWSmqbn0zVMHcxlg/wl7BTLIwxXSVdJml/Se9LmmWtbYzh3qH+pmn7e80YkyfpbrmYiGGtfVDSg1JLD3IMawCySqhJDyMO6qtFqzckvW8x1kkK4dY2Z3ltxGkY0SZABAsXGGzrc//kd3/Rukdv0Emjz9T8555W586do67beZR3cF9xQPCpfolMiQhVLQz3PF6g19V/Yv3vAIC3Io15e0wth4Ms1Xd9xD+L4d5rJe3t+HgvSescH/eQ9D1Ji1uGZWhPSfOMMeOjbdSDP/GXbmokYwSYV4LXVla5MOrx0bEGzXBBQtaqtq5eBf2GqP/5t2v94EO0YNWGuEL+VbNXhvy8M5y7HUsX7T7xfD4RHEHtT4zlA/wlUkA+xFp7mCQZY2ZJeivGe78t6QBjzBBJtZImSjo/8Elr7beS+gQ+NsYslnQt4Tgz8ZcuQnHzz8YVJcWq+fwbPfnml2qyVvnGaMJRod8EVK2o1fZdHf8hy+7crvXPVWr3o8apcL+j1XWvg7Wj0cZVia0oKQ474SK4mhfvm5WwIT/M8yRTpF5X/ltNn0TecAFIvkg9yG1DUGNsrXB+zRWSqiV9IOlpa+0qY8wtxpjxMa8UvpYtG0xSfXpctnPTp1u1olZzlte29eE2Was5y2s7/OwDb8KC5zN3b9yir568Xjs+f1dNO7a2+1y8ldhkHfccy/29eJ5Q6HX1r1ATZQCkR6QK8uHGmM2tvzaSCls/NpKstXb3aDe31i6QtCDosZvCXDvc1YrhS9nwly5V8ORz88/Gbiuaoa5r2LROHz9zsxq3blK/CTepcN/2I9vjrcR6Xc1z3j8VB4Y40esKANGFDcjW2uizj4BW2fCXLv/0nHxugqbbN1fBHzdu+Vpf/XmqZK1mzHpGf/iwU9L6N1PRT5+uXnJ6XQEgukgVZMC1bPhLNxuq4H4ULQhGenPlDKp5rVXWgPzdeqvHEWO073Gjdd2FZ+jAJIXaUP+ScPXslar5/BuV7rNHxveI0usKANFFPWrabzhq2r8yfYpFIkclI36hRqsVFuRrwlHF7UbEBWz7YIk699tXBb33CnsMdCIiHeddkGfU0Pzdn5lePD8AwDtuj5qmgoyk8fP4MTdSWQXP9DcTyRSuohmq5WXzW3/RpkWz1P3QETp88o2e/Nwi/YuBMxxLtOAAQLYiIAOtUvVPz2wG7CjUm6urHbOIrW1W3eJHtfmtueo2tEwbl7+oLl26eLKWaCPYgmVbCw5v3gCAgAy0k4oqOJsBIwsEtECt1jY1auOLv9W2VYvU48ix+t6En7kOx/GEvanlQ3X17JUhj7MOJZM2okbDmzcAaEFABlKMzYDtOUNsUbcCbd3R2K6VwTY3qfHb9So6+SL1P2mirhtziOv7xhP2AgeXPP7GF+1CckG+YWz4DwAAIABJREFUkaw69CAnuwUnnRVc3rwBQAsCMpBi2TASL1mCQ6zzEJCm7d/K5OUrr+tu6j/xVu3Vu0dMYTGRsPebisNCTqwI3Ner8JruCi5v3gCgBQEZOS/VFbtsGImXLKFCrCQ11H2l9U/fpE69Bqj/ub9WXn6nmCeJJBr2wrXbePl7I90VXN68AUCLSEdNA1kvULGrrauX1XcVOy+PmK4oKdaMsw9TcVGhjFrGyOXqqLBQYXXX+k/07z9PVXP9ZvU8fqKk+AKam2Ou/SbdFVyvj9gGgExBBRk5LV0VO7+PxEtFVb1qRW2Hwz92fP6e1s/9jfK6dFP/ibeqc59BcQe0TKzUp7uCyyEiANCCg0KQkwIBMNw4LyPp08qxqV2UT4Q7uCOZVe5Qz2GbGrVu1n8pL7+z9rvwVtV3Lko4oDmDfs/CAhkj1W1vSFlPcTzr9fpnDwC5zO1BIQRk5JxQISRYLp+e5/WJglUravXzp99tVzm21soYo6ZN6zTj/BM0edihCT9P8HNGe82l78KolL7gzBxiAPAOJ+kBYYTbGBbg93+G95qXfbA3Vr3fbnyatVZ1S/+k5h3btMdpl6lTr4FJD8dS9Nc8oL6hSdPnrdLOxua0TZLwe/sNAOQCNukh50QKerm8YS7Aq81tVStq24fj5iZtfPFebf5/T0vNjZJt9qzXNpZwX1ffELYvHQCQG6ggI+eE2wiVy20VTl5tbnOejtfcsENfP3e76j9+Wz1PmKSeJ56vbp07hXyOZLQcxHp8dCiJVtBpnQCAzEEFGTmHUVaReTWGLhAwrbXaMOe/Vf9xjfYYdbmKTrpAnfLyQj5HssbwhXrNY5VIdTsd4wQBAPGjgoycwyir6Lzogw1UcY0x6lE6Xj1Kxqrb0BNkJN31g8NDPl88Y/giVWoDk0uMpFi2Jyf6BirdB4AAAGJDQEZOYiNU6v1gP6vbn1iizkNPVrf9j5XUMk7vguMGhX0tYt0wGOqo5qtmr9T0eas0ffyhbS00oUJ0uLF/+cYkXEFP9wEgAIDYEJABeG7p0qWaPuUcderaTYNKhunf262ryn2sB2eEm1ZRV9/QbhJFuDdIXs0gTvcBIACA2BCQAcTF7aazqqoqTZw4UYMHD1Z1dbX22Wcf188R64bBSBXZaC0NXrbeZOKpfgCQywjIAGJWtaJWU595Vw3NLZ28tXX1mvrMu5Lazwr+/e9/r8svv1xHH320XnjhBfXp0yem54k1tEabVhGtpcGr1hv63gEgsxCQAcRs+rxVbeE4oKHZavq8Ve1C34YNGzR69Gg9/fTT6t69e1zPFUtoDVWpdUpnSwN97wCQOQjIAGJWV98Q9vGmpiZ9/PHHOvDAA3XDDTeoqalJnTol9keN23aOwGO/fn6VNm1vv0ZaGgAAbhGQgRik47CHTDpgwjbu0rnnnqvFixdr9erV6tevX1LCcfBkikhHPwcqtZn0cwMA+AsBGXAp1qCWqc/pRvfO+dq2q30bQ/OOrfqm6jeq+mKV7rnnHvXr1y8pzxXvDGG/tTQQ2AEgc3CSHuBSpKCW6c9ZtaJWZZULNWTafJVVLox4wlvVilrtamxu91jjlq/11RO/0M7aNXryySd15ZVXJm1t2TBDmJP0ACCzEJDhC7EEtHQJF8hq6+o9W3MqwmGs4e3O6jUdNuhtfuNZNX27QS+99KLOO++8pK1NCr+xLpNmCKfjzRUAIH4EZKRdplTXIgUyr9acinAYa3hzhnNrWyrJvUb8SHte+D865ZRTkraugKnlQ1VYkN/usUQ33KX6DVk2VMEBIJcQkJF2iVTXUhl0QgU1Jy8qgl6Ew2CxhrdAON/+8dv66k8/V9OOrTKdOmvw/t5MiKgoKdaMsw9TcVGhjKTiosKETrdLxxuybKiCA0AuYZMe0i7e6lqqN7A5D3sIdxhFMiqCwZu5JhxVrEWrNyS8uSvcJrFYj0EecVBfPfDgLG186Xfq3H9fqamx7XGvJHPDXbyb/hLBSXoAkFkIyEi7WANaQDqCTiColVUujGvN0YQK/XOW1yZUMQ1336nPvqvp81aprr5BRpKzqzhceLPW6k8z79HGlx9R18El6ltxvfK6dJMkLVq9Ie71pVI62h04SQ8AMgsBGWkXb3UtnX2dXlUEvQr9oe7b0GTbDvywUltILo4Q3u666y598fIj6nbIMPU5/SqZ/IK2z0U64tlP4n1Dlii/jZ0DAIRHDzLSLt4e03T2dSa7LzbAq9Dv5usD4XjZtJFhv4/zzz9fg0b9SH3O+Hm7cCy1BGy/bawMJRV93QCAzEYFGb4QT3Ut3X2dXlQEvapuhrtvsFBBevPmzbrnnnv0y1/+UgMHDtRvK2/R1bNXygZdZyVP21uShXYHAEA0BGRkrGwMOl6F/lD3DSU4iH/11VcaM2aM/v73v+u0007T8ccfr4qSYl01e2XIr8+UsWW0OwAAIiEgI6NlW9DxKvQH37eoW4G27mhsd+BHcBD/5z//qfLycq1fv17PP/+8jj/++LbPFaepjxcAgFQw1gb/Q6m/lZaW2pqamnQvA1ks3Di0bBPp+6ypqdHpp58ua60WLFigo48+usPXhqp0J6MPGwAArxhjlltrS6NdRwUZcEj1bOV0hvFI1fempib169dPc+fO1YEHHhjyayXp18+v0qbtLZMwunRizy8AIDsQkNFBrlRQQ0nlbOVUh/FI6wi83j13/EvTLx6jimOP1bvvvqv8/PAnB0rSjobmtl/X1TekZf0AACQbJR+0k45jeP3EqzFroY7ETuSI7WRxvt7fvjVX7/72x7ritgdUtaI2ajj2w/oBAPACARnt5Hro8WK2crg3HfEcVx0qaCfizuo12r6rQZsWztKmRY+o20EnKX+fo1y93uk8qAUAAC8RkNFOroceLw6RCPemI9+YkNeHC+NVK2o19Zl32wXtqc+8m1BIrt24WRtf+F9tfvsv6nHkGeozfqpMpwJXr3e0NxPJDvMAAKQKARntpPN0Oj/w4oS8cGGzydoOYdxIGnFQ35DXT5+3qt1YNklqaLaaPm9V3GvrtnGNtv1jsYpOvki9Tv1PGdPyR4Kb1zvSm4lcb9UBAGQ2NumhnXSfTucHyZ6tHO4Uu+KiQo04qK8ef+OLtlPprKQ5y2tVus8eHdZQV98Q8v519Q0qq1wY02bKpqYm5efn67afTtbVBbvL9hrU9jm3r3ekmc1llQtTttkRAIBko4KMdryooOa6SJXWRas3dDiyOZ6e71gqtJ988olKSkq0ZMkSVZQU6+7Lxsf9eleUFGvZtJH6tHKslk0b2fZ1ud6qAwDIbFSQ0UG2nU6XbpEqrVfHcGRzr24FbTOHQ6lvaNL0easivnYrVqzQmDFj1NDQoE6dOrWtL9mvd7iqea606gAAMhsVZCAFwlVaY+n5vnncocoLva+vTV19Q9gq8sKFCzVs2DB17txZf/vb33TCCSfE9k3EwIvNjgAApAoBGTHLxOkEfl1zLEGyoqRYPQsLot4zVHvGO++8o9GjR2vQoEF6/fXXdfDBB8e/aBdo1QEAZDJaLBATv5z+Fgs/rzlS+0UodRFaLAJCtWccccQRuvnmm3X55ZerV69eCa3Z7UmLtOoAADIVARkxSeVRzMni9zXHEiTD9fYGXyNJ1lrdfvvtmjRpkvbZZx/dcMMNCa/Vz282AABIFlosEJNMnE6QiWsOJ1RLhlOgPaOxsVGXXnqprr/+ev3xj39M2vPn+kmLAIDcQAUZMcnE6QSZuOZwglsyiroVyFrp2/qGtnaHUUN7qaKiQvPnz9f06dN14403Ju35s+nNBgAA4RCQEZNMPEgkE9ccSaSWjI0bN+qUU07RW2+9pZkzZ+qyyy5L6nNn05sNAADCISAjJrFuKvODaGt2u+ksExQUFMgYo2effVZnnXVW0u+fbW82AAAIxVgbfI6Xv5WWltqampp0LwNZInjTmdQS+DJtJNkHH3ygQYMGqXv37mpublZennfbC7LpDQUAILcYY5Zba0ujXUcFGTnN7xMu3FiyZInGjx+vCRMmaNasWZ6GY4nxbQCA7McUC+S0TN909pe//EWjRo3SgAEDdNNNN6V7OQAAZAUqyMgJ4doCMnnT2QMPPKCf/OQnOuaYY/TCCy+od+/e6V4SAABZgQoysl6gz7i2rl5W3x1uUbWiNqajnv1k06ZNuvnmm3X66afr1VdfJRwDAJBEVJCRVqnY8BWpz3jZtJFt12TCprOmpibl5eWpV69eWrZsmQYPHqxOnfjPGACAZOJvVqRNqo4tjtZnnCmbzurr63X++efr4IMP1m233ab9998/3UsCACAr0WKBtEnVscXh+okj9RlXrahVWeVCDZk2X2WVC1W1ojapa4rVpk2bVF5erueee04DBgxI61oAAMh2BGSkTaomSMTaZxypZzkd1q5dq5NPPllvvvmmfj7jfj217VDfBHcAALIRLRaISTJ7hlM1QSLW0//8NBt5586dGj58uNavX68b7v2Tnly7u+obWn5mXrWkAACQ6wjIcC3ZPcOpPLY4lj5jP81G7tKli2bMmKH9999fV1RvagvHAZl2qAkAAJmAFgu4luye4YqSYs04+zAVFxXKSCouKvTFEc/x9Cwn2wsvvKBnnnlGknTuueeqpKTEV8EdAIBsRgUZrnkR0Pw4QSKVle1QHnnkEU2ZMkXHHXecJkyY0HZ0dCYfagIAQCahggzX/FBZTYV0Vbattbr11lt16aWX6tRTT9VLL73UFo6l2DcbAgCA+FBBhmvprqwG8/KQkVRXtq21uvLKK/V///d/mjx5smbNmqXOnTt3WJOUOYeaAACQqQjIcM1PAS3WDYOpOLEvEcYYde3aVddee61uv/32dpVjJz+2pAAAkG2MtTbda4hJaWmprampSfcykGZllQtD9uMWFxW2HR8dEBympZbKtx82BH777bdat26dDj74YFlrZYxJ63oAAMhmxpjl1trSaNdRQUZGimXDYKxzjVNVbf7Xv/6lMWPG6JtvvtGHH36orl27Jv05AABA7AjIyEixTHSIJUwne9ZzOB9++KHKy8u1YcMGzZkzJ6Fw7Pf2EQAAMg1TLJCRYpnoEMv0jWTPeg7l7bffVllZmbZt26ZFixapvLw87nv57VhsAACyAQEZGSmWUWyxhOlUHMZRWVmpHj16aNmyZTr66KMTulcqAj0AALmGFgtkLLcTHWKZvpHMwziCWx+uHrmvzjlmsB577DFt3bpVe+65Z8z3DMbpegAAJB8BGTnBbZhO1qzn4F7mf1Q/rgt/t0wNT8/TpLIDtdtuu8X2DYTB6XoAACQfLRaAQ7JO0Qu0PljbrG8WPqy6xY8ob/d+unfRJ0ldL6frAQCQfFSQgSChqs2xTopYV1cv29Sgrxfco+3/eE09jhqnXqf8WF9tbQr7NfGuVfLH4S0AAGQLAjIQRTyj3wYWFeq92f+n7f94TUXDLtbux54jY4wnrQ+crgcAQHLRYgFEEc+kiKnlQ9Wv7AfqfcbP1fO4c2WMofUBAIAMQUAGogg3EaK2rl5llQvbzRz++OOPdf3112v84QN016WjNLTs9IR6mQEAQOrRYgFEEW5ShNS+3WKQ/bfGjBmjxsZGTZkyRRUlQwjEAABkICrIQBShJkU41Tc06Yb7ntSwYcPUtWtX/e1vf9OQIUPCXl+1olZllQs1ZNr8DhVoAACQflSQgSickyJCVZK3rf6bPn/+f/S9Qw7SSy+9pOLi8FXjeDb8AQCA1KKCDLhQUVKsZdNGqjjEFIq8wh7que/hWrp0acRwLPnvaGiq2QAAdERABmIQaLew1mrH2lWSpG77HK6f3PGIioqKon69n46GDlSza+vqZfVdNZuQDADIdQRkIAYVJcWqOLyfNi64R/9+/BfauW6NrKS576xzFSzDzUFOx9HQfqtmAwDgFwRkIAbbtm3TAzderm1/f1U9T7xAnQccKMl9sPTT0dB+qmYDAOAnBGTApa+//lqnnHKK6j58W3uU/0RFZZNkjGn7vJtgWVFSrBlnH6biosK0z0f2UzUbAAA/YYoFckrVilrdWb1G6+rqNbCoUFPLh7oOp/Pnz9fKlSs19IKbtaP4qA6fdxss/XI09NTyoe0makiJV7MT+fkCAOAXxlqb7jXEpLS01NbU1KR7GchAwSPWpJZAGK2Cu3PnTnXp0kWS9Nlnn2nlpoKQ95lwVLEWrd6QUeEwmYE23p8vAACpYoxZbq0tjXodARm5oqxyYcg5xsVFhVo2bWTIr3nttdc0efJkVVVV6aijvqsaBwfLEQf11ZzltTkdDuP5+QIAkEpuAzItFsgZsW5Kmzt3rs4//3ztu+++6tu3b7vPBbdJlFUuDDsRIlcCMpv+AADZgk16yBnheoTzjOkwom3mzJk655xzdOSRR2rp0qUaNGhQxHsTDtn0BwDIHlSQkTNCbUqTpCZrdf3c91Xz+TdatHqD/vnWQm34y60qPelUvfLSc+rWrVvUew8sKgzZXpDMcOj3DXBebPoDACAdqCAjq0Q6OjkwYi3fMZotoL6hSY+/8YVq6+pVuN/R6nXqf2rLSVfp5TWbXD2v1/ONM+HUOz+NsAMAIBGebtIzxoyW9FtJ+ZIettZWBn3+Gkn/IalR0gZJP7LWfh7pnmzSQzhVK2o19Zl31dD83e/pgjyjO889vF1IGzJtvoJ/1zc37FTd4kfU8/iJyt+tV9vjsWww87LCywY4AAASl/ZNesaYfEn3STpN0lpJbxtj5llr/+G4bIWkUmvtdmPMf0m6Q9J5Xq0J2W36vFXtwrEkNTRbTZ+3ql1QDW6HaNqxVRvm3KKdaz9Ql+JD1P2QYW2fC+4hjhSCvZxvnKoeZ7+3cQAAkApetlgcI+kja+0n1tpdkp6SdKbzAmvtImvt9tYP35C0l4frQZarq29w9bizHaJx89f69+PXaee/PlSf8de1C8dS+x7idLY5pGIDXCa0cQAAkApeBuRiSV86Pl7b+lg4l0p60cP1ZK1IfbfoKNAru0fD1/rqz1PVvOVrXXDzA+rz/eHtrgvuIb6zek3YUW5e87rHWUrv9wcAgJ94GZA77oRSh9bPlguNmSypVNKdYT4/xRhTY4yp2bBhQxKXmPmo+n2nV7cC149XlBTr5evH6qSjDlXNG8v0519dGnWDWTpHuaViAxyj6gAAaOHlmLe1kvZ2fLyXpHXBFxljTpV0g6Rh1tqdoW5krX1Q0oNSyya95C81c0Wq+mVb72i0/tibxx2qqc++q4Ymxya9fKObxx3a7j5Lly7VMcccoz59+mjRokVtj0frIU7FKLdIvOxxltL//QEA4BdeVpDflnSAMWaIMaazpImS5jkvMMaUSPq9pPHW2vUeriVr5UrVz02lvKKkWHeec3i7Kuud57SfYDFr1iwNHz5ct912W8xrSEWbQzpl+/cHAIBbnlWQrbWNxpgrJFWrZczbI9baVcaYWyTVWGvnqaWlYjdJz5iW2bRfWGvHe7WmbJQrVT+3lfJwVVZrrW677TbdeOONKi8v19SpU2NeQ+C+2TrlIdu/PwAA3PJ0DrIXmIPcXqCyGnx6WbYd0BBqdrHU0uj+aeVYSeFbMJqamvSzn/1M9913ny688ELNmjVLBQUd+5IZcQYAQHZL+xxkpEauVP2iVcqD3yjU1tXr6tkrddXslerdvEmrH/uTpk6dqsrKSuXldewsCvX11899X5Ky7mcJAAAiIyBnAa83b/nB1PKhISvlgf7YUC0YTQ07ZTp11sa8Xhrwo/t0wqQRIcNxuK/342ZHqtwAAHjPy016QNJEG3MWvCmxcctGffWnn2vzW3NbPi7sFXGeb7hNjbV19b6ZMc1IPwAAUoMKMjJGpEq5swWjYeNa/fvpm9Rcv1md+w1puybSZI9wLRxGans83W0X8VS5qTgDABA7KsjICoFWi53r1uirx6+Tbdyp/pNmqHDIkW3XRJrsEWrEmVHHk23SebJcrCP9qDgDABAfAjKyQkVJsXrY7fr37BuV16Wb9px8p7oMOKDt89Hm+YZq4Qg33yVdM6bDBfxwj3N0NAAA8aHFAr4WS4vAf088QT/56GrlDThY+bv1anu8qLBA08cfGrW1ILiFo6xyoa9mTEfbqBgsVw6RAQAg2QjI8C03o9estbrrrrt06KGHqmLMGOnGy5PWcxtrIE2GSG8IYh3plyuHyAAAkGwcFIKk8GIzWLgKbnFRoZZNG6nm5mZde+21uvvuu/WjH/1Is2bNSuj5QknlJrdkH/qSK4fIAADgFgeFIKkiBUWvDtmI1CKwa9cuXXLJJXryySf1s5/9TP/7v/8b9/NEksoZ08mexZwrh8gAAJBsBGREFS0Ae3XIRrgWgT2752vs2LF65ZVXVFlZqeuuu07GmLifxy+86BnOhUNkAABINqZYIKpo0xC82gwWavRaYUG+rhv7PR1wwAH6wx/+oF/84hdZEY6l2KdUAAAAb1BB9hk/HuwQLQB7tRksuEVgj6ZN+tGxg3TWkXvprPvvT+jefpSOTYEAAKAjKsg+4teDHaJVNsNVepMR7CpKirVs2kjN+cEArf3jz/WHW69Rpm0sdSvacdoAACA1qCD7iFe9vImKVtn0ejPYK6+8orPOOku9e/fW448/njUtFaHQMwwAQPoRkH3Erwc7uAnAXgW7p556ShdddJEOOuggvfTSSxo4cGCHa/zYlgIAADIXAdlH/HywQ7ICcCxhtrm5Wffff7+OP/54PffccyoqKgp5Py9GzGUz3lAAABAZPcg+4mUvrx+47bG21mr79u3Ky8vTvHnzVF1dHTIcS9EnbKA9v/a5AwDgJwRkH8n2TVpuwmxDQ4MuueQSjR07Vrt27VJRUZG6du0a9p5+bUsJpWpFrcoqF2rItPkqq1yYllDKGwoAAKKjxcJnsnmTVrQwu23bNp177rl68cUXdcstt6igoCDqPf3cluLkl1aQTHpDAQBAulBBhucCldNww9kGFhXq66+/1siRI1VdXa0HH3xQv/rVr1xNq8iUthS/VG45jAQAgOgIyPCUs+c1lECYnTRpkt577z3NmTNHP/7xj2N6jq4F3/02Lios8GVbil8qt5nyhgIAgHSixQKeClU5DSh2TFA44J57tGnTJp144okhrw01eUFSh/nMOxubw64lndMb/NIK4vXMagAAsoHJtFPJSktLbU1NTbqXAZeGTJsfsrXCSPrD6O566aWXNGPGjIjtFMH9u1JL1bNLpzzV1Td0uL64qFDLpo10dY9UVZvT/fwAAEAyxiy31pZGu44WC3gqXIW085dvqby8XPPmzdPmzZsj3iNc/26ocCyFbltItAc40QkU2T6hBACAbEKLBTwV6pjqHe++qC+qWw4Aef7559WzZ8+I94i1TzdUKE+kBzhZEyiyeUIJAADZhICcg7zoxQ13z+Ce16Z35ujff/2Dxo0bp6eeekrdunWLeu9w/bu9uhVoR0Nzh7aFUBvOEukBjlR9JvACAJB9CMg5xot5vNHu6QzK8+Y1af6QAt13333q1Mndb78RB/XV42980a6XubAgXzePO1SSuw1noSrZbqc3+GUCBQAASA0Cco7xohoa7Z719fVaunSpRo0apfHjx2v8+PGu7121olZzlte2C8dG0oSjvgvdbtadyPQGv0ygAAAAqUFAzjFeVEMj3fObb77RuHHj9Pbbb+ujjz7SoEGDYrp3qPBtJS1avSHmdcbbA5xI9RkAAGQeAnKO8aIaGu6evbVFJ510kj766CM98cQTMYdjKXz4rq2rV1nlwpTM8mV2MAAAuYWAnGO8qIaGumde3Vp9VvVrNdRvU3V1tYYPHx7XvcOFbyO1PZ6MPupomEABAEDuICDnCOeUiZ6FBepakKe67Q2uq6GRJl+EqrDuv+NL/TVPenXJEh1++OFxrztU+DZSh8NHQvVRp/PkPAAAkLk4SS8HJHqKWyxfv3nzZu2+++6y1mrjxo3q06dP1PvfWPW+nnzzSzVZq3xjNOnYvfWbisPaPb8z6IaqKAfcc94Rqigp5uQ6AADQASfpoU2ip8i5/fqHH35Y+++/v9asWSNjjOtw/Oc3vlBT6xu1Jmv15ze+0I1V77edXnf17JWSpLvPO0LLpo1UcYR+6evnvt8WqBP5ngEAQO6ixSILRGslSHRyRbSvt9bq1ltv1a9+9SuNHj1ae+21l+u1P/nmlyEff/zNLzRneW3I2cqh2i4CAiGY2cUAACBeVJAzXKCVoLauXlbfBcmqFbVt14SbUOF2ckWkr29qatIVV1yhX/3qV7rooos0b948de/e3fX6m8K0+FiriLOVJxwVvk0i8EYh3JqTIVDdHjJtvsoqF7b7eQMAgMxGQM5wbloJppYPVWFBfrtrYplcEenr7733Xt1///267rrr9Oijj6qgoCCm9ecbE9P1gQpwpDnIgSp6It9zJG7elAAAgMxFi0WGC7dhzdlKkOgc30hfv+Pg/9LAgQN13nnnxbX+ScfurT+/8UWHx7sV5Gl7Q3OHxwMV4EitEs7vzYspFl6cRggAAPyDgJzBqlbUhhx5JnVsJUh0jq/z69etW6drrrlGw2bOVK9eveIOx5LaplUET7Eo3WePiPOaw02zKCosaDd+zovASn8zAADZjYCcwe6sXhMyHBspYitBIvOB16xZo/Lycm3cuFGrV6/W8ccfH9/iHX5TcVi7sW5O4dYZ7sCT6eMPTXg90XhxGiEAAPAPAnIGC1extAp/olzwfOBYTqF78803NXbsWOXn52vx4sU66qij4l+8C5EqwOk8/tmL0wgBAIB/EJAzWLhKZqQ5wfH2zy5atEhnnHGGBgwYoOrqau23337xLzxJ0nX8czrDOQAA8B4BOYPFU8mMt3926NChKi8v18yZM9W/f/+oa8v2Y57TFc4BAID3GPOWwSpKijXj7MNUXFQoo5bKcbSjlGOZD2yt1dy5c9XY2KiBAwdq7ty5rsMxY9AAAECmIiBf4jFnAAAR70lEQVRnuIqSYi2bNlKfVo7Vsmkjo1Y13c4Hbm5u1jXXXKMJEybosccei2lNHPMMAAAyGS0WOcZN/+zOnTt1ySWX6KmnntJVV12lH/7whzE9B2PQAABAJiMg+5DX/buR+me3bNmis88+W6+88opuv/12TZ06VSbG0+78OAYt23uiAQBA8tBi4TPp7t/95z//qbfeekuPPfaYrrvuupjDsSSNOKhvTI97Ld0/UwAAkFkIyD6Trv7duro6SdKRRx6pTz/9VBdddFHc91q0ekNMj3uNnmgAABALArLPpKN/d/ny5Ro6dKhmzZolSdpjjz0Sup/fepD9th4AAOBv9CD7TKr7d//617/q7LPPVu/evXXiiSdGvNZtH2+qvge/rQcAAGQHKsg+43YMWzI88cQTGjt2rPbdd1+9/vrrGjo0/HPE0sebiu/Bb+sBAADZg4DsM/Ec/hGPDz74QJMnT9YJJ5ygJUuWaODAgRGvj6WPNxXfg9/WAwAAsgctFj6UimOMDz74YM2dO1ejR49W165do14fax+v19+D39YDAACyBxXkHNLQ0KApU6Zo6dKlkqSKigpX4ViK7YjqVPDbegAAQPYgIOeIrVu3avz48XrooYf01ltvxfz1fuvj9dt6AABA9qDFIgds2LBBY8eO1fLly/XQQw/pP/7jP2K+h5sjqlPJb+sBAADZw1hr072GmJSWltqampp0LyNjrF+/XieeeKK+/PJLzZ49W+PHj0/3kgAAANLCGLPcWlsa7ToqyFmuT58+GjlypC688EKVlZXF/PVuZw0DAABkCwJyllqyZIkGDx6sQYMG6YEHHojrHoFZw4FxaoFZw5IIyQAAIGuxSS8LPfvsszrttNN09dVXJ3SfWGYNAwAAZAsCcpa577779IMf/EBdBhyot/c6V2WVC0OeLudGrLOGAQAAsgEBOUtYa3XjjTfqiiuuUPcDjlXRhF8rr7BHxCOYo2HWMAAAyEUE5CxRX1+v+fPnq9/Rp2uPM69XXkGX7z4XZ1sEs4YBAEAuYpNehtu+fbskqVu3bnrttdf0/VuXSMZ0uC6etghmDQMAgFxEQM5gGzdu1Lhx49S3b19VVVVp9913V3GvbqoNEYbjbYuoKCkmEAMAgJxCi0WG+vLLL3XSSSfpnXfe0cUXXyzTWjX2qi2iakWtyioXasi0+Qlt/AMAAPA7KsgZaNWqVSovL9eWLVtUXV2tYcOGtX3Oi7YI5iEDAIBcQkDOME1NTZowYYKam5u1dOlSff/73+9wTbLbIiLNQyYgAwCAbENAzjD5+fl68skn1atXLw0ePDglz8k8ZAAAkEvoQc4QDz30kG666SZJUklJScrCscQ8ZAAAkFsIyD5nrdUtt9yiKVOmqKamRo2NjSlfg5uNf2ziAwAA2YIWCx9ramrST3/6U82cOVMXX3yxHnroIXXqlPqXLNrGPzbxAQCAbEJA9ilrrSZPnqynnnpKv/jFLzRjxoy2UW7JUrWi1vW0i0gb/9jEBwAAsgkB2aeMMTrjjDN07LHH6qqrrkr6/ZNZ9WUTHwAAyCb0IPtMbW2tFixYIEm64IILPAnHUuSqb6zYxAcAALIJAdlHVq9erRNOOEEXX3yxtmzZ4ulzJbPq69XpfQAAAOlAQPaJN954QyeeeKJ27Nih6upq9ejRw9PnS2bVt6KkWDPOPkzFRYUykoqLCjXj7MPoPwYAABmJHmQfmD9/vs4991wNHDhQ1dXV2m+//Tx/zqnlQ9v1IEuJVX2TfXofAABAuhCQfWDJkiU65JBDtGDBAvXr1y8lzxltdBsAAECuMtbadK8hJqWlpbampibdy0iYtVbr169X//791dzcrPr6enXv3j3dywIAAMhaxpjl1trSaNfRg5wGzc3Nuuqqq3TEEUfoX//6l/Ly8gjHAAAAPkFATrGdO3dq0qRJuvfeezVx4kT1798/3UsCAACAAz3IKbR582adddZZWrhwoe644w5de+21ST8dDwAAAIkhIKfQTTfdpCVLluiPf/yjLrzwwnQvBwAAACGwSS+FtmzZonfeeUfDhg1L91IAAAByDpv0fKKmpkZnnHGGtm7dqh49ehCOAQAAfI6A7KGXX35Zw4cP16pVq7Rhw4Z0LwcAAAAuEJA98vjjj2vs2LHaf//99frrr2vIkCHpXhIAAABcICB74JFHHtHkyZN14okn6rXXXtOAAQPSvSQAAAC4xBQLDwwfPlyXXXaZ7r77bnXt2jXdy0maqhW1HE0NAACyHhXkJNm1a5ceeughWWu17777aubMmVkXjq+f+75q6+plJdXW1ev6ue+rakVtupcGAACQVATkJNi6davGjRunKVOmaNGiRelejifurF6j+oamdo/VNzTpzuo1aVoRAACAN2ixSND69es1duxYvfPOO3r44Yc1cuTIdC/JE+vq6mN6HAAAIFMRkBPw6aefatSoUVq7dq2qqqo0bty4dC/JMwOLClUbIgwPLCpMw2oAAAC8Q4tFAj777DNt3bpVr776alaHY0maWj5UhQX57R4rLMjX1PKhaVoRAACAN6ggx2HdunUaOHCgRowYoY8//ljdunVL95I8F5hWwRQLAACQ7QjIMXr66ad10UUXafbs2TrzzDNzIhwHVJQUE4gBAEDW87TFwhgz2hizxhjzkTFmWojPdzHGzG79/JvGmMFeridRv/vd7zRx4kQdffTROvnkk9O9HAAAAHjAs4BsjMmXdJ+kMZIOkTTJGHNI0GWXStpkrd1f0t2SbvdqPYmw1uqGG27QlVdeqfHjx+vll19Wr1690r0sAAAAeMDLCvIxkj6y1n5ird0l6SlJZwZdc6akx1p//aykU4wxxsM1xeWVV17RbbfdpilTpujZZ59VYSGTGwAAALKVlz3IxZK+dHy8VtKx4a6x1jYaY76V1FvS186LjDFTJE2RpEGDBnm13rBOO+00vfzyyzr11FPlw/wOAACAJPKyghwqSdo4rpG19kFrbam1trRv375JWVysTjvtNMIxAABADvAyIK+VtLfj470krQt3jTGmk6Sekr7xcE0AAABARF4G5LclHWCMGWKM6SxpoqR5QdfMk3Rx66/PkbTQWtuhggwAAACkimc9yK09xVdIqpaUL+kRa+0qY8wtkmqstfMkzZL0J2PMR2qpHE/0aj0AAACAG54eFGKtXSBpQdBjNzl+vUPSuV6uAQAAAIiFpweFAAAAAJmGgAwAAAA4EJABAAAABwIyAAAA4EBABgAAABwIyAAAAIADARkAAABwICADAAAADgRkAAAAwIGADAAAADgQkAEAAAAHAjIAAADgQEAGAAAAHAjIAAAAgAMBGQAAAHAgIAMAAAAOBGQAAADAgYAMAAAAOBCQAQAAAAcCMgAAAOBAQAYAAAAcCMgAAACAAwEZAAAAcCAgAwAAAA4EZAAAAMCBgAwAAAA4EJABAAAABwIyAAAA4EBABgAAABwIyAAAAIADARkAAABwICADAAAADgRkAAAAwIGADAAAADgQkAEAAAAHAjIAAADgQEAGAAAAHAjIAAAAgAMBGQAAAHAgIAMAAAAOBGQAAADAgYAMAAAAOBCQAQAAAAcCMgAAAOBAQAYAAAAcCMgAAACAAwEZAAAAcCAgAwAAAA4EZAAAAMCBgAwAAAA4EJABAAAABwIyAAAA4EBABgAAABwIyAAAAIADARkAAABw6JTuBSC6qhW1urN6jdbV1WtgUaGmlg9VRUlxupcFAACQlQjIPle1olbXz31f9Q1NkqTaunpdP/d9SSIkAwAAeIAWC5+7s3pNWzgOqG9o0p3Va9K0IgAAgOxGQPa5dXX1MT0OAACAxBCQfW5gUWFMjwMAACAxBGSfm1o+VIUF+e0eKyzI19TyoWlaEQAAQHZjk57PBTbiMcUCAAAgNQjIGaCipJhADAAAkCK0WAAAAAAOBGQAAADAgYAMAAAAOBCQAQAAAAcCMgAAAOBAQAYAAAAcCMgAAACAAwEZAAAAcCAgAwAAAA4EZAAAAMCBgAwAAAA4EJABAAAABwIyAAAA4EBABgAAABwIyAAAAIADARkAAABwICADAAAADgRkAAAAwIGADAAAADgQkAEAAAAHAjIAAADgQEAGAAAAHAjIAAAAgAMBGQAAAHAgIAMAAAAOBGQAAADAgYAMAAAAOBCQAQAAAAdjrU33GmJijNkg6fM0PHUfSV+n4XnhPV7b7MVrm714bbMXr2328sNru4+1tm+0izIuIKeLMabGWlua7nUg+Xhtsxevbfbitc1evLbZK5NeW1osAAAAAAcCMgAAAOBAQHbvwXQvAJ7htc1evLbZi9c2e/HaZq+MeW3pQQYAAAAcqCADAAAADgRkAAAAwIGAHMQYM9oYs8YY85ExZlqIz3cxxsxu/fybxpjBqV8l4uHitb3GGPMPY8x7xphXjTH7pGOdiF2019Zx3TnGGGuMyYgxQ3D32hpjftD63+4qY8wTqV4j4uPiz+RBxphFxpgVrX8un56OdSI2xphHjDHrjTF/D/N5Y4y5t/V1f88Yc2Sq1+gGAdnBGJMv6T5JYyQdImmSMeaQoMsulbTJWru/pLsl3Z7aVSIeLl/bFZJKrbXfl/SspDtSu0rEw+VrK2NMD0lXSnoztStEvNy8tsaYAyRdL6nMWnuopKtSvlDEzOV/tzdKetpaWyJpoqT7U7tKxOlRSaMjfH6MpANa/zdF0swUrClmBOT2jpH0kbX2E2vtLklPSToz6JozJT3W+utnJZ1ijDEpXCPiE/W1tdYustZub/3wDUl7pXiNiI+b/24l6b/V8qZnRyoXh4S4eW1/LOk+a+0mSbLWrk/xGhEfN6+tlbR76697SlqXwvUhTtbaJZK+iXDJmZL+aFu8IanIGDMgNatzj4DcXrGkLx0fr219LOQ11tpGSd9K6p2S1SERbl5bp0slvejpipAsUV9bY0yJpL2ttS+kcmFImJv/bg+UdKAxZpkx5g1jTKTKFfzDzWs7XdJkY8xaSQsk/TQ1S4PHYv37OC06pXsBPhOqEhw8B8/NNfAf16+bMWaypFJJwzxdEZIl4mtrjMlTSzvUJalaEJLGzX+3ndTyT7XD1fKvPkuNMd+z1tZ5vDYkxs1rO0nSo9bau4wxx0v6U+tr2+z98uChjMhRVJDbWytpb8fHe6njP+m0XWOM6aSWf/aJ9E8J8Ac3r62MMadKukHSeGvtzhStDYmJ9tr2kPQ9SYuNMZ9JOk7SPDbqZQS3fyY/Z61tsNZ+KmmNWgIz/M3Na3uppKclyVr7/yR1ldQnJauDl1z9fZxuBOT23pZ0gDFmiDGms1o2BcwLumaepItbf32OpIWW01YyQdTXtvWf4X+vlnBMH2PmiPjaWmu/tdb2sdYOttYOVkt/+XhrbU16losYuPkzuUrSCEkyxvRRS8vFJyldJeLh5rX9QtIpkmSMOVgtAXlDSlcJL8yTdFHrNIvjJH1rrf1XuhcVjBYLB2ttozHmCknVkvIlPWKtXWWMuUVSjbV2nqRZavlnno/UUjmemL4Vwy2Xr+2dknaT9EzrvssvrLXj07ZouOLytUUGcvnaVksaZYz5h6QmSVOttRvTt2q44fK1/bmkh4wxV6vln+AvoSDlf8aYJ9XS8tSntX/8ZkkFkmStfUAt/eSnS/pI0nZJP0zPSiPjqGkAAADAgRYLAAAAwIGADAAAADgQkAEAAAAHAjIAAADgQEAGAAAAHBjzBgA+ZYzpLenV1g/3VMsYs8Ac2GOstbvSsjAAyHKMeQOADGCMmS5pq7X2f4IeN2r5s5zjdwEgSWixAIAMY4zZ3xjzd2PMA5LekbS3MabO8fmJxpiHW3/d3xgz1xhTY4x5q/XkKgBABARkAMhMh0iaZa0tkVQb4bp7Jd1hrS2V9ANJD6dicQCQyehBBoDM9LG19m0X150qaWjr8emS1MsYU2itrfduaQCQ2QjIAJCZtjl+3SzJOD7u6vi1ERv6ACAmtFgAQIZr3aC3yRhzgDEmT9JZjk+/IukngQ+MMUeken0AkGkIyACQHX4h6SW1jIVb63j8J5LKjDHvGWP+IenH6VgcAGQSxrwBAAAADlSQAQAAAAcCMgAAAOBAQAYAAAAcCMgAAACAAwEZAAAAcCAgAwAAAA4EZAAAAMDh/wMlfvr0CeJ/GgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#预测值与真值的散点图\n",
    "plt.figure(figsize=(10, 10))\n",
    "plt.scatter(y_train, y_train_pred_lr)\n",
    "plt.plot([-0, 1], [-0,1], '--k')   #数据已经标准化，3倍标准差即可\n",
    "plt.axis('tight')\n",
    "plt.xlabel('True ')\n",
    "plt.ylabel('Predicted ')\n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Ridge"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The RMSE score of RidgeCV on test is 0.008346958240306478\n",
      "The RMSE score of RidgeCV on train is 0.00746331665807188\n"
     ]
    }
   ],
   "source": [
    "#岭回归／L2正则\n",
    "#class sklearn.linear_model.RidgeCV(alphas=(0.1, 1.0, 10.0), fit_intercept=True, \n",
    "#                                  normalize=False, scoring=None, cv=None, gcv_mode=None, \n",
    "#                                  store_cv_values=False)\n",
    "from sklearn.linear_model import  RidgeCV\n",
    "\n",
    "#1. 设置超参数（正则参数）范围\n",
    "# alphas = [ 0.01, 0.1]\n",
    "n_alphas = 100\n",
    "alphas = np.logspace(-5,2,n_alphas)\n",
    "\n",
    "#2. 生成一个RidgeCV实例, Ridge alpha固定，而RigdeCV可以指定alpha\n",
    "'''\n",
    "alphas : numpy array of shape [n_alphas]\n",
    "Array of alpha values to try. Regularization strength; must be a positive float. \n",
    "Regularization improves the conditioning of the problem and reduces the variance of the estimates. \n",
    "Larger values specify stronger regularization. \n",
    "Alpha corresponds to C^-1 in other linear models such as LogisticRegression or LinearSVC.\n",
    "'''\n",
    "ridge = RidgeCV(alphas=alphas, store_cv_values=True)  \n",
    "\n",
    "#3. 模型训练\n",
    "ridge.fit(X_train, y_train)    \n",
    "\n",
    "#4. 预测\n",
    "y_test_pred_ridge = ridge.predict(X_test)\n",
    "y_train_pred_ridge = ridge.predict(X_train)\n",
    "\n",
    "\n",
    "# 评估，使用RMSE_score评价模型在测试集和训练集上的性能\n",
    "print ('The RMSE score of RidgeCV on test is', mean_squared_error(y_test, y_test_pred_ridge))\n",
    "print ('The RMSE score of RidgeCV on train is', mean_squared_error(y_train, y_train_pred_ridge))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEKCAYAAAA4t9PUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3XmYZXV95/H3p25tvQPVxdYL1UKrNIuATbuimUERHEOLgdhuQUMkmQlPohnHoA6YwTjPEKM4BjQhA5FgIhhc0tFOUAQ1RFmKVbqbpWjofSl6qeraq2595497bnO7qOVSVafuwuf1PPepc3/3d8753oauT//O8juKCMzMzCarptQFmJlZZXOQmJnZlDhIzMxsShwkZmY2JQ4SMzObEgeJmZlNiYPEzMymxEFiZmZT4iAxM7MpqS11ATNh4cKF0dLSUuoyzMwqykMPPfRCRDRP1O8VESQtLS20traWugwzs4oiaXMx/Xxoy8zMpsRBYmZmU+IgMTOzKXGQmJnZlDhIzMxsShwkZmY2JQ4SMzObEgeJmVkVeuC5ffzfu56hdyCb+r4cJGZmVejethf46k+fpjaj1PflIDEzq0J7OvtYOLeBukz6v+YdJGZmVWhXZx/HzG+YkX05SMzMqtCujj6Ond84I/tykJiZVaHdnX0c4yAxM7PJ6B/Ksr9n0EFiZmaTs6ezH6A6Dm1JOl/SU5LaJF05yucNkm5PPr9fUkvS3iTpHkldkq4fsc7Pkm0+mryOTvM7mJlVml2dfQAcs2BmgiS1B1tJygA3AO8EtgEPSlobERsKul0G7I+IkyStAa4F3g/0AVcBpyavkT4UEX5SlZnZKHYnQVINI5JVQFtEbIqIAeA2YPWIPquBW5LlO4BzJSkiuiPiXnKBYmZmL8OujmREUgWX/y4Ctha835a0jdonIoaADqCpiG3/XXJY6ypJ6d+2aWZWQXZ39tFQW8OCWXUzsr80g2S0X/AxiT4jfSgiTgPOSV4fGXXn0uWSWiW1tre3T1ismVm12NXZz7ELGpmpf2enGSTbgCUF7xcDO8bqI6kWWADsG2+jEbE9+XkQ+Edyh9BG63djRKyMiJXNzc2T+gJmZpVod2cfx8ybmfMjkG6QPAgsl7RMUj2wBlg7os9a4NJk+WLg7ogYc0QiqVbSwmS5DngP8MS0V25mVsF2d/bN2BVbkOJVWxExJOkK4E4gA9wcEeslXQO0RsRa4CbgVklt5EYia/LrS3oemA/US3ovcB6wGbgzCZEMcBfwt2l9BzOzShMR7Oro47wVM3OiHVIMEoCIWAesG9F2dcFyH3DJGOu2jLHZ109XfWZm1aazd4j+oeEZu6sdfGe7mVlVOXQzooPEzMwmIx8kx87gORIHiZlZFdndMbN3tYODxMysquSnR2meN3Mn2x0kZmZVZFdnH0fOrqOxLjNj+3SQmJlVkZl8oFWeg8TMrIrscpCYmdlU7O7sn9ET7eAgMTOrGoPZYV7o6p/R6VHAQWJmVjXaD/YTMbOX/oKDxMysauzunNkHWuU5SMzMqsTuEkyPAg4SM7OqkX/E7kxOjwIOEjOzqrGrs5/aGnHU7PoZ3a+DxMysSuzs6OW4IxqpqZmZR+zmOUjMzKrE9v29HL9g1ozv10FiZlYldhzoZdGRDhIzM5uEoewwuzr7WHSEg8TMzCZhV2cfw0H1BYmk8yU9JalN0pWjfN4g6fbk8/sltSTtTZLukdQl6foxtr1W0hNp1m9mVil2HMhd+nt8NQWJpAxwA3ABsAL4gKQVI7pdBuyPiJOA64Brk/Y+4CrgU2Ns+31AVxp1m5lVou0HeoAqCxJgFdAWEZsiYgC4DVg9os9q4JZk+Q7gXEmKiO6IuJdcoBxG0lzgT4A/T690M7PKkh+RVNuhrUXA1oL325K2UftExBDQATRNsN0vAF8GeqanTDOzyrf9QC9HzalnVv3MPRkxL80gGe2OmJhEnxc7S2cAJ0XE9yfcuXS5pFZJre3t7RN1NzOraNv395ZkNALpBsk2YEnB+8XAjrH6SKoFFgD7xtnmm4DXS3oeuBd4taSfjdYxIm6MiJURsbK5uXlSX8DMrFLsONDL8UfM7BxbeWkGyYPAcknLJNUDa4C1I/qsBS5Nli8G7o6IMUckEfGNiDg+IlqAtwJPR8RvTHvlZmYVJCLYfqC3JCfaAWrT2nBEDEm6ArgTyAA3R8R6SdcArRGxFrgJuFVSG7mRyJr8+smoYz5QL+m9wHkRsSGtes3MKlVH7yA9A9mSHdpKLUgAImIdsG5E29UFy33AJWOs2zLBtp8HTp1ykWZmFW77gV6gNFdsge9sNzOreNv3J0FSgnm2wEFiZlbxdiQjklKdI3GQmJlVuO0HemmoraFpzsw+0CrPQWJmVuF2HMjN+ivN7AOt8hwkZmYVrpSX/oKDxMys4m0/ULq72sFBYmZW0fqHsrQf7PeIxMzMJmfnoeeQlGZ6FHCQmJlVtPylv6W6hwQcJGZmFa3Ud7WDg8TMrKJtP9CLBMcu8KEtMzObhO37e2me20BD7cw/0CrPQWJmVsE27+th6VGzS1qDg8TMrIJt2dvD0iYHiZmZTULfYJZdnX2ccNScktbhIDEzq1Bb9/UAcIJHJGZmNhmb9+aCxIe2zMxsUjbnRyQ+2W5mZpOxZW83cxtqOapEzyHJSzVIJJ0v6SlJbZKuHOXzBkm3J5/fL6klaW+SdI+kLknXj1jn3yQ9Jmm9pL+WVLqLp83MSih/6W+pnkOSl1qQJL/gbwAuAFYAH5C0YkS3y4D9EXEScB1wbdLeB1wFfGqUTf92RLwOOBVoBi5JoXwzs7K3ZW9PyU+0Q7ojklVAW0RsiogB4DZg9Yg+q4FbkuU7gHMlKSK6I+JecoFymIjoTBZrgXogUqnezKyMZYeDrftLfw8JpBski4CtBe+3JW2j9omIIaADaJpow5LuBPYAB8kFkJnZK8rOjl4Gs1Hye0gg3SAZ7aDdyNFDMX1e2iHiXcBxQAPwn0fduXS5pFZJre3t7RNt0sysomzZWx73kEC6QbINWFLwfjGwY6w+kmqBBcC+YjYeEX3AWl56uCz/+Y0RsTIiVjY3N7/M0s3Mylv+0t9Sz7MF6QbJg8ByScsk1QNryP3iL7QWuDRZvhi4OyLGHJFImivpuGS5Fng38OS0V25mVuY27+2hLqOSPmI3rzatDUfEkKQrgDuBDHBzRKyXdA3QGhFrgZuAWyW1kRuJrMmvL+l5YD5QL+m9wHnAXmCtpIZkm3cDf53WdzAzK1db9nWz+MjZZGpKe+kvpBgkABGxDlg3ou3qguU+xrh8NyJaxtjs2dNVn5lZpdq8t/TTx+f5znYzswoTEWVzDwk4SMzMKs7+nkEO9g95RGJmZpOzeW83ACc0lf4eEnCQmJlVnC1l8hySPAeJmVmFOfQcEh/aMjOzydi8t4dj5jfQWFcek587SMzMKsxzL3TRUibnR8BBYmZWUSKCtj1dnHT03FKXcoiDxMysgrzQNUBn35CDxMzMJqdtTxcAJzY7SMzMbBKebc8FiUckZmY2KW17uphdn+G4BY2lLuUQB4mZWQV5tr2LE5vnIpV+1t88B4mZWQV5tsyu2AIHiZlZxejuH2JHRx8nNpfPPSTgIDEzqxib2nOTNXpEYmZmk9LWfhBwkJiZ2SS17ekiUyOWHuVDW2ZmNgnP7unmhKbZ1NeW16/uoquR9FZJH0uWmyUtK2Kd8yU9JalN0pWjfN4g6fbk8/sltSTtTZLukdQl6fqC/rMl/UjSk5LWS/o/xdZvZlbp2tq7OKmM7mjPKypIJH0e+FPgM0lTHfCtCdbJADcAFwArgA9IWjGi22XA/og4CbgOuDZp7wOuAj41yqb/MiJeC5wJvEXSBcV8BzOzSjaYHWbz3m5OLLPzI1D8iOQi4EKgGyAidgDzJlhnFdAWEZsiYgC4DVg9os9q4JZk+Q7gXEmKiO6IuJdcoBwSET0RcU+yPAA8DCwu8juYmVWsLft6GMxG5Y5IgIGICCAAJBVzpmcRsLXg/bakbdQ+ETEEdABNxRQk6QjgN4GfFtPfzKySPZufrLGCRyTfkfQ3wBGSPg7cBfztBOuMdv9+TKLPSzcs1QLfBr4WEZvG6HO5pFZJre3t7RNt0sysrLW152f9La8rtgBqi+kUEX8p6Z1AJ/Aa4OqI+MkEq20DlhS8XwzsGKPPtiQcFgD7iijpRuCZiPjqODXfmPRj5cqVE4aTmVk5a9vTxbHzG5nXWFfqUl6i2JPtc4C7I+J/kBuJzJI00bd5EFguaZmkemANsHZEn7XApcnyxck+xv2lL+nPyQXOJ4qp3cysGrTt6eLEo8tvNALFH9r6BdAgaRG5w1ofA7453grJOY8rgDuBjcB3ImK9pGskXZh0uwloktQG/Alw6BJhSc8DXwE+KmmbpBWSFgOfI3cV2MOSHpX0e0V+BzOzijSUHeapXQc5+dj5pS5lVEUd2gIUET2SLgP+KiL+QtIjE60UEeuAdSPari5Y7gMuGWPdlrFqKbJmM7Oq8PzebvqHhllxfHkGSbEjEkl6E/Ah4EdJW7EhZGZmU7B+RycAJx9X2UHyx+QOO30vOTy1DLg7vbLMzCxv486D1Gdqyuo57YWKHVX0AMPk7k7/MLnDS74SysxsBmzY2clJR88tuzm28ooNkn8gN13JE+QCxczMZsjGnZ28/dXNpS5jTMUGSXtE/EuqlZiZ2Uu0H+yn/WB/2Z4fgeKD5POS/h+56Uj6840R8b1UqjIzMyA3GgFYUQVB8jHgteRm/c0f2grAQWJmlqINVRQkr4uI01KtxMzMXmLjzk6OX9DIgtnlNzVKXrGXANw3yrNEzMwsZRt2dJbtjYh5xQbJW4FHk6cdPi7p15IeT7MwM7NXur7BLJte6C7rE+1Q/KGt81OtwszMXuKZ3V1kh6Osz49A8dPIb067EDMzO9yGnR1A+U6Nkleet0mamRkbdx5kTn2GpUfNLnUp43KQmJmVqQ07OnntcfOpqSnvSc8dJGZmZSg7HDyxo4NTy/yKLXCQmJmVpad3H6RnIMuZS48sdSkTcpCYmZWhR7YcAODMpUeUuJKJOUjMzMrQI1v2c9Sc+rI/0Q4OEjOzsvTo1gOcseQIpPI+0Q4pB4mk85O74dskXTnK5w2Sbk8+v19SS9LeJOkeSV2Srh+xzhclbZXUlWbtZmal0tE7yDN7ujhzSfkf1oIUg0RSBrgBuABYQe7piiPn67oM2B8RJwHXAdcm7X3AVeQepjXSvwCrUinazKwMPL4tf36k/E+0Q7ojklVAW0RsiogB4DZg9Yg+q4FbkuU7gHMlKSK6I+JecoFymIi4LyJ2pli3mVlJPbLlABKcvmRBqUspSppBsgjYWvB+W9I2ap+IGAI6gKYUazIzK3uPbNnPSc1zmd9YvlPHF0ozSEY7QxST6DO5nUuXS2qV1Nre3j4dmzQzS11E8OjWAxVx2W9emkGyDVhS8H4xsGOsPpJqgQXAvunYeUTcGBErI2Jlc3PzdGzSzCx1m/f2sL9nsGLOj0C6QfIgsFzSMkn1wBpg7Yg+a4FLk+WLgbsjYlpGJGZmleiRrfuByrgRMS+1IEnOeVwB3AlsBL4TEeslXSPpwqTbTUCTpDbgT4BDlwhLeh74CvBRSdvyV3xJ+gtJ24DZSfufpfUdzMxm2iNbDjCnPsPyo+eVupSiFftgq0mJiHXAuhFtVxcs9wGXjLFuyxjtnwY+PX1VmpmVj0e3HuD0xUeQKfMZfwv5znYzszLR1T/E+h2dvP6Eyjk/Ag4SM7Oy8eBz+8gOB28+sbLugnCQmJmViV8++wL1mRrO8ojEzMwm45fP7uWsE46gsS5T6lJeFgeJmVkZ2N89wIadnbz5xIWlLuVlc5CYmZWB+5/bSwQVd34EHCRmZmXhV8/uZVZdhtMXV86NiHkOEjOzMvDLZ/dy9rKjqK+tvF/LlVexmVmV2XOwj2f2dFXkYS1wkJiZldyvnt0LVOb5EXCQmJmV3K+e3cu8xlpOOb4yHmQ1koPEzKzEfrVpL29Y1lRR82sVcpCYmZXQpvYuNu/t4ZzllXf/SJ6DxMyshH66cQ8A5558dIkrmTwHiZlZCf1k425OPm4+i4+cXepSJs1BYmZWIvu7B2h9fh/vqODRCDhIzMxK5p6n9jAc8I6Tjyl1KVPiIDEzK5G7Nu7m6HkNnLaoMi/7zXOQmJmVQP9Qlp8/1c65Jx9DTYVe9puXapBIOl/SU5LaJF05yucNkm5PPr9fUkvS3iTpHkldkq4fsc7rJf06Wedrkir7v4CZvSLdv2kf3QNZ3rmiss+PQIpBIikD3ABcAKwAPiBpxYhulwH7I+Ik4Drg2qS9D7gK+NQom/4GcDmwPHmdP/3Vm5ml666Nu5lVl6nI54+MlOaIZBXQFhGbImIAuA1YPaLPauCWZPkO4FxJiojuiLiXXKAcIuk4YH5E/CoiAvh74L0pfgczs2kXEdy1YTfnLF9YcU9DHE2aQbII2FrwflvSNmqfiBgCOoDxZi1blGxnvG2amZW1R7YeYEdHH+edcmypS5kWaQbJaOcuYhJ9JtVf0uWSWiW1tre3j7NJM7OZ9f2Ht9NQW8O7Tqnsy37z0gySbcCSgveLgR1j9ZFUCywA9k2wzcUTbBOAiLgxIlZGxMrm5uaXWbqZWToGhob54eM7OO+UY5nXWFfqcqZFmkHyILBc0jJJ9cAaYO2IPmuBS5Pli4G7k3Mfo4qIncBBSW9Mrtb6HeCfp790M7N0/Pzpdvb3DHLRmceXupRpU5vWhiNiSNIVwJ1ABrg5ItZLugZojYi1wE3ArZLayI1E1uTXl/Q8MB+ol/Re4LyI2AD8V+CbwCzgX5OXmVlF+MEj22maU885y6vnSElqQQIQEeuAdSPari5Y7gMuGWPdljHaW4FTp69KM7OZ0dE7yE827uaDq5ZSl6me+8Gr55uYmZW5f3tiJwNDw1x0ZnVdbOogMTObId97eDuvWjiH0xdX9txaIzlIzMxmwNZ9Pdz/3D4uOnMR1Tazk4PEzGwG3HrfZjI14pKVSybuXGEcJGZmKesZGOK2B7ZwwanHcuyCxlKXM+0cJGZmKfvew9vp7BviY29pKXUpqXCQmJmlKCL45i+f57RFCzhr6ZGlLicVDhIzsxT9R9te2vZ0cembW6ruJHueg8TMLEXf/OVzNM2p5z2nH1fqUlLjIDEzS8lzL3Tz0yf38ME3LK2K546MxUFiZpaSr/30GRpqa/jIm04odSmpcpCYmaWgbc9BfvDodn7nTS0cPa/6Lvkt5CAxM0vBdXc9w+y6DL//tleVupTUOUjMzKbZhh2d/OjxnXzsLctomttQ6nJS5yAxM5tm1931NPMaa/n4OdU/GgEHiZnZtHpky35+smE3Hz/nVSyYXR2P0p2Ig8TMbJoMZYf5nz94gmPmN/C7b11W6nJmjIPEzGya3HrfZtbv6OSq96xgbkOqD6AtKw4SM7NpsLuzjy//+GnOWb6Q/3Ja9d7FPppUg0TS+ZKektQm6cpRPm+QdHvy+f2SWgo++0zS/pSkdxW0/7GkJyStl/SJNOs3MyvWF364gYHsMF9YfWrVzqk1ltSCRFIGuAG4AFgBfEDSihHdLgP2R8RJwHXAtcm6K4A1wCnA+cDXJWUknQp8HFgFvA54j6TlaX0HM7Ni3PPkHn74+E7+22+cSMvCOaUuZ8alOSJZBbRFxKaIGABuA1aP6LMauCVZvgM4V7koXw3cFhH9EfEc0JZs72TgvojoiYgh4OfARSl+BzOzce3u7ONT//QYrzlmHn/w9hNLXU5JpBkki4CtBe+3JW2j9kmCoQNoGmfdJ4C3SWqSNBt4N1B9z600s4qQHQ4+efujdA8Mcf0Hz6zqiRnHk+ZlBaMdJIwi+4zaHhEbJV0L/AToAh4DhkbduXQ5cDnA0qVLi63ZzKxo3/hZG798di9/8Vuns/yYeaUup2TSHJFs4/DRwmJgx1h9JNUCC4B9460bETdFxFkR8bak7zOj7TwiboyIlRGxsrm5eRq+jpnZi+7btJfr7nqGC193PJesXFzqckoqzSB5EFguaZmkenInz9eO6LMWuDRZvhi4OyIiaV+TXNW1DFgOPAAg6ejk51LgfcC3U/wOZmYv8czug1z+962c0DSbL170yrtKa6TUDm1FxJCkK4A7gQxwc0Ssl3QN0BoRa4GbgFsltZEbXaxJ1l0v6TvABnKHrv4wIrLJpr8rqQkYTNr3p/UdzMxG2t3Zx0f/7kEa6jLc8rFVzGt8ZUyDMh7lBgDVbeXKldHa2lrqMsyswh3sG+S3/+Y+tuzt5vbffxOnLlpQ6pJSJemhiFg5Ub9Xzj38ZmZTcKBngI9980Ge2X2Qmz56dtWHyMvhIDEzm8Cezj4+ctMDPPdCN9d/8Cze/mpfwFPIQWJmNo4te3v48E3380JXPzd/9GzeunxhqUsqOw4SM7Mx3P3kbj55+2MAfOv33sBZS48scUXlyUFiZjbCUHaY6+56mhvueZYVx83nGx8+ixOaXnlzaBXLQWJmVuCpXQf57Pd/zUOb97Pm7CX82YWnvGKnPimWg8TMDOgbzPK1nz7Djb/YxLzGWr76/jN475kjpwe00ThIzOwVbWBomO+0buWGe9rY2dHHxa9fzGfffTJHzakvdWkVw0Eyjo07O+kbzE7cEUo2RUKxey2mPBVsraj+enG9wv6jteuwbepQv1y7Dn1eoxc/q5GSPqJGudVqpOSVW6+moE2CTM3hn5uNpat/iO8/vI2//vkmth/o5fUnHMl17z+DN76qqdSlVRwHyTj+6NuP8MyerlKXYZNUUxAsmZoXX7WHftbkfmZybbU1NdRlRF2mJveqraE+eV9fW3PoZ32mhoa6GhpqMzTU1tBY9+LPxroaZtVlmFWXobE+c2h5dn2GWfUZZtfXkqlxwJVKRPD4tg5ue3Arax/dTvdAltctOYL//b7TeNvyhf7HxyQ5SMbxxYtOo3tg1FnqD1eiWWaiyB0XMwtOYZ+xuhdOpxOH2g5fI98lDluOEe2H989/HgHDkXyrguXD24PscG55OGB4OAiC4cg9GyIiyA5DNoLh4XjxZ7I8lH2xbTAbZIeHGRrOtQ8NDzOYDQazwwxlg97eQQazwwxmhxkYSl7ZYfqHcq+BoeGJ/2BH0VhXw+z6WuY0ZJhTX8uchtxrbvJ+bmMtcxuSV7I8r7GWuQ11yc9a5jfWMachQ20m1adlV4W+wSwPb9nPXRv2cOf6XWw/0EtjXQ2/efrxfPANSzljyREOkClykIxj1bKjSl2ClbGIYCA7TN/gMP2DWfqHhukdzNI3mKV3IEtvwc+egSw9A0PJzyzd/UOHfnYPDNHRO8iOA7109w/RlbyK+QfArLpMLlwaa5nXWMf8guCZ11hXEEKjB9TcJMTqqiSQIoJt+3tZv6OT9Ts6eOC5fTyy9QADQ8PU19bwtuUL+cQ7lnPeimNZMNuTLU4XB4nZJElKDm9lYNb0/lKKCLqToDnYN8TBvkG6+7Mc7BvMve8foitpP9iXC57OZHlnR9+hz7oHijvHV19bk4TK4aOkOfUZ5jTUMjs5LDcnOUSXO0yXYVZd7aHlxtoMs+pzh/wa6zLJ4b/cocCp/os/IugfGqazd5DOvkEO9Ayy52A/ezr72H2wny17e9i8r5vnX+ihqz93FKFGcOqiBVz6phN4w7Im3nhiE3Mb/CsvDf5TNStDkg6NGI6ZP/ntDA8HXQO5MMqHUld/brmrcLn/xeV8gHX0DrIzGSX1JKOqyR7Oqz90nunFc1D5c1b5CyvyhzwjYHA4d3hxMDt8aFQ3PMYIrS4jFh85m6VHzeb1S4/kNcfOZ8Xx83ntsfN8/8cMcZCYVbGaGjG/sY750/TMjMHs8KFDdt39Q4cO5fUMZOkbTA7tDWTpH8od6usbzCbnliL5mU0CInd+ajhy57MiInfVYHIlX12mhtoaUVf74sULs+ozzJ9Vx4JZdRwxq47meQ0cPa+BI2fXU+MLGErKQWJmRcuPJqYrmKw6VMcZNjMzKxkHiZmZTYmDxMzMpiTVIJF0vqSnJLVJunKUzxsk3Z58fr+kloLPPpO0PyXpXQXtn5S0XtITkr4tqTHN72BmZuNLLUgkZYAbgAuAFcAHJK0Y0e0yYH9EnARcB1ybrLsCWAOcApwPfF1SRtIi4I+AlRFxKpBJ+pmZWYmkOSJZBbRFxKaIGABuA1aP6LMauCVZvgM4V7k7l1YDt0VEf0Q8B7Ql24PclWazJNUCs4EdKX4HMzObQJpBsgjYWvB+W9I2ap+IGAI6gKax1o2I7cBfAluAnUBHRPw4lerNzKwoaQbJaHcIjbw3daw+o7ZLOpLcaGUZcDwwR9KHR925dLmkVkmt7e3tL6NsMzN7OdK8IXEbsKTg/WJeehgq32dbcqhqAbBvnHXfATwXEe0Akr4HvBn41sidR8SNwI1Jv3ZJmyf5PRYCL0xy3ZlWSbVCZdVbSbVCZdVbSbVCZdU71VpPKKZTmkHyILBc0jJgO7mT4h8c0WctcCnwK+Bi4O6ICElrgX+U9BVyI4/lwAPAMPBGSbOBXuBcoHWiQiKiebJfQlJrRKyc7PozqZJqhcqqt5Jqhcqqt5Jqhcqqd6ZqTS1IImJI0hXAneSurro5ItZLugZojYi1wE3ArZLayI1E1iTrrpf0HWADMAT8YURkgfsl3QE8nLQ/QjLqMDOz0kh1rq2IWAesG9F2dcFyH3DJGOt+EfjiKO2fBz4/vZWamdlk+c72iVXSiKeSaoXKqreSaoXKqreSaoXKqndGalUU8xg2MzOzMXhEYmZmU+IgKYKkP5O0XdKjyevdpa5pIpI+JSkkLSx1LeOR9AVJjyd/rj+WdHypaxqLpC9JejKp9/uSjih1TeORdEkyL92wpLK8ymii+fjKiaSbJe2R9ESpa5mIpCWS7pG0Mfl/4I/T3J+DpHjXRcQZyWvdxN1LR9IS4J3kZgAod1+KiNMj4gzgh8DVE61QQj8BTo2I04Gngc+UuJ6JPAG8D/hFqQsZTZHz8ZWTb5Kb+68SDAH/PSJOBt4I/GGaf7YOkup0HfBpXjqTQNmJiM6Ct3Mo45oj4sfJVD4A95G7UbZsRcT/WMYYAAAEoklEQVTGiHiq1HWMo5j5+MpGRPyC3G0KZS8idkbEw8nyQWAjL52iato4SIp3RXJI4+ZkqpayJOlCYHtEPFbqWool6YuStgIforxHJIV+F/jXUhdR4YqZj8+mKHk8x5nA/Wntw89sT0i6Czh2lI8+B3wD+AK5fy1/AfgyuV8kJTFBrZ8FzpvZisY3Xr0R8c8R8Tngc5I+A1xBCe8TmqjWpM/nyB06+IeZrG00xdRbxoqZj8+mQNJc4LvAJ0aM/qeVgyQREe8opp+kvyV3LL9kxqpV0mnkJrR8LDcbP4uBhyWtiohdM1jiYYr9swX+EfgRJQySiWqVdCnwHuDcKINr51/Gn205KmY+PpskSXXkQuQfIuJ7ae7Lh7aKIOm4grcXkTuJWXYi4tcRcXREtEREC7m/qGeVMkQmIml5wdsLgSdLVctEJJ0P/ClwYUT0lLqeKnBoPj5J9eSmSFpb4pqqQvJcp5uAjRHxldT3Vwb/qCp7km4FziA37H4e+P2I2FnSooog6XlyT5Ms25lKJX0XeA25CTk3A3+QPHem7CRzwjUAe5Om+yLiD0pY0rgkXQT8FdAMHAAejYh3jb/WzEoupf8qL87H95JpkcqFpG8Dv0FuRt3dwOcj4qaSFjUGSW8F/h34Nbm/WwCfTeuKUweJmZlNiQ9tmZnZlDhIzMxsShwkZmY2JQ4SMzObEgeJmZlNiYPEbBySuqa4/h2SXjVBn59NNDtvMX1G9G+W9G/F9jebCgeJWUoknQJkImLTTO87ItqBnZLeMtP7tlceB4lZEZTzJUlPSPq1pPcn7TWSvp488+GHktZJujhZ7UPAPxds4xuSWpO+/2uM/XRJ+rKkhyX9VFJzwceXSHpA0tOSzkn6t0j696T/w5LeXND/B0kNZqlykJgV533kZjd4HfAO4EvJ1DnvA1qA04DfA95UsM5bgIcK3n8uIlYCpwNvl3T6KPuZAzwcEWcBP+fwecdqI2IV8ImC9j3AO5P+7we+VtC/FTjn5X9Vs5fHkzaaFeetwLcjIgvslvRz4Oyk/Z8iYhjYJemegnWOA9oL3v+2pMvJ/b07jtzDnB4fsZ9h4PZk+VtA4WR7+eWHyIUXQB1wvaQzgCzw6oL+e4CyfeKkVQ8HiVlxRpvyfLx2gF6gEUDSMuBTwNkRsV/SN/OfTaBwDqP+5GeWF//ufpLcvE+vI3eEoa+gf2NSg1mqfGjLrDi/AN4vKZOct3gb8ABwL/BbybmSY8hN6pe3ETgpWZ4PdAMdSb8LxthPDZA/x/LBZPvjWQDsTEZEHyE3+WHeqynTmaqtunhEYlac75M7//EYuVHCpyNiVzJ78bnkfmE/Te4pdB3JOj8iFyx3RcRjkh4B1gObgP8YYz/dwCmSHkq28/4J6vo68F1JlwD3JOvn/aekBrNUefZfsymSNDciuiQ1kRulvCUJmVnkfrm/JTm3Usy2uiJi7jTV9QtgdUTsn47tmY3FIxKzqfuhpCOAeuAL+QeJRUSvpM+Tew75lpksKDn89hWHiM0Ej0jMzGxKfLLdzMymxEFiZmZT4iAxM7MpcZCYmdmUOEjMzGxKHCRmZjYl/x8Fj1VCShqIwgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha is: 1.0476157527896641\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "Cross-validation values for each alpha (if store_cv_values=True and cv=None). \n",
    "After fit() has been called, this attribute will contain the mean squared errors (by default) \n",
    "or the values of the {loss,score}_func function (if provided in the constructor).\n",
    "'''\n",
    "mse_mean = np.mean(ridge.cv_values_, axis = 0)\n",
    "plt.plot(np.log10(alphas), mse_mean.reshape(len(alphas),1)) \n",
    "\n",
    "#这是为了标出最佳参数的位置，不是必须\n",
    "#plt.plot(np.log10(ridge.alpha_)*np.ones(3), [0.28, 0.29, 0.30])\n",
    "\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()\n",
    "\n",
    "print ('alpha is:', ridge.alpha_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef_lr</th>\n",
       "      <th>coef_ridge</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>mnth_9</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>0.076603</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>mnth_3</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>0.035351</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>mnth_5</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>0.040793</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>mnth_10</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>0.021773</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>mnth_6</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>0.022622</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>mnth_4</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>0.005495</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>mnth_8</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>0.005721</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>mnth_2</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>-0.024810</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>mnth_1</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>-0.037155</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>mnth_12</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>-0.053201</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>mnth_11</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>-0.051814</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>mnth_7</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>-0.041378</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>workingday</td>\n",
       "      <td>6.844604e+10</td>\n",
       "      <td>0.024141</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>holiday</td>\n",
       "      <td>6.844604e+10</td>\n",
       "      <td>-0.035052</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>temp</td>\n",
       "      <td>3.499264e-01</td>\n",
       "      <td>0.225219</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>yr</td>\n",
       "      <td>2.277146e-01</td>\n",
       "      <td>0.228619</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>atemp</td>\n",
       "      <td>1.069391e-01</td>\n",
       "      <td>0.185919</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>windspeed</td>\n",
       "      <td>-1.432005e-01</td>\n",
       "      <td>-0.126652</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>hum</td>\n",
       "      <td>-1.608988e-01</td>\n",
       "      <td>-0.131658</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>weekday_6</td>\n",
       "      <td>-9.891706e+09</td>\n",
       "      <td>0.033147</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>weekday_0</td>\n",
       "      <td>-9.891706e+09</td>\n",
       "      <td>-0.022235</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>weekday_5</td>\n",
       "      <td>-7.833774e+10</td>\n",
       "      <td>0.009216</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>weekday_3</td>\n",
       "      <td>-7.833774e+10</td>\n",
       "      <td>0.002494</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>weekday_4</td>\n",
       "      <td>-7.833774e+10</td>\n",
       "      <td>0.000245</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>weekday_2</td>\n",
       "      <td>-7.833774e+10</td>\n",
       "      <td>-0.009279</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>weekday_1</td>\n",
       "      <td>-7.833774e+10</td>\n",
       "      <td>-0.013587</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>weathersit_1</td>\n",
       "      <td>-2.424241e+11</td>\n",
       "      <td>0.092051</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>weathersit_2</td>\n",
       "      <td>-2.424241e+11</td>\n",
       "      <td>0.028758</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>weathersit_3</td>\n",
       "      <td>-2.424241e+11</td>\n",
       "      <td>-0.120809</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>season_4</td>\n",
       "      <td>-2.255948e+12</td>\n",
       "      <td>0.087523</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>season_2</td>\n",
       "      <td>-2.255948e+12</td>\n",
       "      <td>0.012401</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>season_3</td>\n",
       "      <td>-2.255948e+12</td>\n",
       "      <td>-0.000879</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>season_1</td>\n",
       "      <td>-2.255948e+12</td>\n",
       "      <td>-0.099045</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         columns       coef_lr  coef_ridge\n",
       "12        mnth_9  1.581468e+11    0.076603\n",
       "6         mnth_3  1.581468e+11    0.035351\n",
       "8         mnth_5  1.581468e+11    0.040793\n",
       "13       mnth_10  1.581468e+11    0.021773\n",
       "9         mnth_6  1.581468e+11    0.022622\n",
       "7         mnth_4  1.581468e+11    0.005495\n",
       "11        mnth_8  1.581468e+11    0.005721\n",
       "5         mnth_2  1.581468e+11   -0.024810\n",
       "4         mnth_1  1.581468e+11   -0.037155\n",
       "15       mnth_12  1.581468e+11   -0.053201\n",
       "14       mnth_11  1.581468e+11   -0.051814\n",
       "10        mnth_7  1.581468e+11   -0.041378\n",
       "31    workingday  6.844604e+10    0.024141\n",
       "30       holiday  6.844604e+10   -0.035052\n",
       "26          temp  3.499264e-01    0.225219\n",
       "32            yr  2.277146e-01    0.228619\n",
       "27         atemp  1.069391e-01    0.185919\n",
       "29     windspeed -1.432005e-01   -0.126652\n",
       "28           hum -1.608988e-01   -0.131658\n",
       "25     weekday_6 -9.891706e+09    0.033147\n",
       "19     weekday_0 -9.891706e+09   -0.022235\n",
       "24     weekday_5 -7.833774e+10    0.009216\n",
       "22     weekday_3 -7.833774e+10    0.002494\n",
       "23     weekday_4 -7.833774e+10    0.000245\n",
       "21     weekday_2 -7.833774e+10   -0.009279\n",
       "20     weekday_1 -7.833774e+10   -0.013587\n",
       "16  weathersit_1 -2.424241e+11    0.092051\n",
       "17  weathersit_2 -2.424241e+11    0.028758\n",
       "18  weathersit_3 -2.424241e+11   -0.120809\n",
       "3       season_4 -2.255948e+12    0.087523\n",
       "1       season_2 -2.255948e+12    0.012401\n",
       "2       season_3 -2.255948e+12   -0.000879\n",
       "0       season_1 -2.255948e+12   -0.099045"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(feature_names), \"coef_lr\":list((lr.coef_.T)), \"coef_ridge\":list((ridge.coef_.T))})\n",
    "fs.sort_values(by=['coef_lr'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAALICAYAAABiqwZ2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xt4FOX5P/73s5sFNoBJBDytInggKKJE4gn8VkEFlYNRFPDQ769oPbcWaqNRkZMo8Uc9Fq1StR/BEyCYotiGVjzGik0awNIPeEKBBQSEgJAAm93n+0fYsNmdmZ3ZndmZ2X2/rsurZTM7+8zsBO65537uR0gpQURERERELTx2D4CIiIiIyEkYIBMRERERxWCATEREREQUgwEyEREREVEMBshERERERDEYIBMRERERxWCATEREREQUgwEyEREREVEMBshERERERDHy7B6AUV27dpU9evSwexhERERE5DJ1dXXbpZTdkm3nugC5R48eqK2ttXsYREREROQyQojv9WzHEgsiIiIiohgMkImIiIiIYjBAJiIiIiKKwQCZiIiIiCgGA2QiIiIiohgMkImIiIiIYjBAJiIiIiKKwQCZiIiIiCgGA2QiIiIiohgMkImIiIiIYjBAJiIiIiKKwQCZiIiIiCgGA2QiIiIiohgMkImIiIiIYjBAJiIiIiKKwQCZiIiIiCgGA2QiIiIiohgMkImIiIiIYjBAJiIiIiKKwQCZiIiIiCgGA2QiIiIiohgMkImIiIiIYjBAJiIiIiKKwQCZiIiIiCgGA2QiIiIiohiWBchCiJeEEFuFEP9R+bkQQjwthPhaCLFKCHGmVWMhIiIiItLLygzy/wC4VOPnlwE4+eB/twD4o4VjISIiIiLSxbIAWUr5EYAdGptcAWCObPEZgEIhxNFWjYeIiIiIMk9KiZqaGruHYYidNcgBABti/rzx4GsJhBC3CCFqhRC127Zty8jgiIiIiCh9TU1NuPPOO/Hhhx/aPRTd8mz8bKHwmlTaUEo5G8BsACgtLVXchoiIiIicY9++fZBSIj8/Hx988AEKCgrsHpJudmaQNwI4LubPxwLYZNNYiIiIiMgku3fvxmWXXYZrr70WUkoUFhZCCKXcqDPZGSAvBvB/D3azOBfALinlZhvHQ0RERERp2rJlCy644AJ88sknuPrqq10VGEdZVmIhhHgdwIUAugohNgKYDMAHAFLK5wC8C+ByAF8DaAQwzqqxEBEREZH1vvnmGwwZMgRbtmzB22+/jUsv1Wpo5lyWBchSymuT/FwCuNOqzyciIiKizIlEIigrK8OuXbuwbNkynHPOOXYPKWV2TtIjIiIioizh8Xjw5z//GZ06dULv3r3tHk5auNQ0EREREaXszTffxEMPPQQAKC0tdX1wDDBAJiIiIqIU/fGPf8To0aNRXV2NAwcO2D0c0zBAJiIiIiJDpJSYPHky7rjjDgwfPhxLly5Fu3bt7B6WaViDTERERESG3HXXXZg1axbGjRuH2bNnIy8vu0JKZpCJiIiIyJCzzz4bFRUVePHFF7MuOAaYQSYiIiIiHXbt2oW6ujoMHjwYP//5z+0ejqUYIBMRERGRpi1btuDSSy/FN998g++++w5dunSxe0iWYoBMRERERKq+/vprDB06FD/88AMWLVqU9cExwACZiIiIiFT8+9//xmWXXYZwOIxly5bh7LPPtntIGcEAmYiIiIgULViwAB06dMDSpUtRXFxs93AyRkgp7R6DIaWlpbK2ttbuYRARERFlrT179qBTp06IRCLYsWMHunbtaveQTCGEqJNSlibbjm3eiIiIiKjVM888g1NOOQUbNmyAx+PJmuDYCAbIRERERAQpJSZNmoRf/epXOPPMM3MyMI5iDTIRERFRjguHw7jjjjswe/Zs3HjjjXj++eezcgEQvZhBJiIiIspxlZWVmD17Nu6//3688MILOR0cA8wgExEREeW8u+66Cz169MD1119v91AcgRlkIiIiohy0efNm3HTTTdi7dy86d+7M4DgGA2QiIiKiHPPVV19hwIABmDdvHlavXm33cByHATIRERFRDqmrq8PAgQOxZ88efPDBBzmzOp4RDJCJiIiIcsSHH36ICy+8EPn5+aipqUFpadI1M3ISA2QiIiKiHBEIBHDuuefi008/Ra9evewejmMxQCYiIiLKcv/4xz8gpcRJJ52Ev//97zjmmGPsHpKjMUAmIiIiylJSSkycOBGXXHIJ5s6da/dwXIN9kImIiIiyUHNzM26//Xa88MIL+OUvf4nrrrvO7iG5BjPIRERERFmmqakJ11xzDV544QVMnDgRs2fPzvnV8YzgmSIiIiLKMitWrMBf//pXPP300/j1r39t93BchwEyERERUZbYt28fOnTogPPOOw9ff/01jj32WLuH5EossSAiIiLKAl9++SVOPfVUzJ8/HwAYHKeBATIRERGRy/3rX/9qXR3vxBNPtHs4rscAmYiIiMjF/v73v2PQoEHo1KkTampq0L9/f7uH5HoMkImIiIhcau3atRg2bBhOPPFEfPrppzj55JPtHlJWYIBMRERE5FLFxcV45pln8OGHH+Loo4+2ezhZgwEyERERkYtIKTFt2jTU19cDAG6++WYUFhbaPKrswjZvRERERC7R3NyM2267DS+++CIaGxtRUlJi95CyEgNkIiIiIhdoamrC2LFjsXjxYjz44IOYOnWq3UPKWgyQiYiIiBxu9+7dGDZsGGpqajBr1izceeeddg8pqzFAJiIiInI4v9+PLl26YN68ebjmmmvsHk7WY4BMRERE5FBr165FUVERjjjiCLz11lsQQtg9pJzALhZEREREDvT5559j4MCBGDduHAAwOM4gBshEREREDlNdXY3BgwejoKAATz31lN3DyTkMkImIiIgc5LXXXsPw4cNx0kknoaamBieddJLdQ8o5DJCJiIiIHGL//v2YNm0azj//fHz44Yc46qij7B5STuIkPSIiIiKbSSkRDofRvn17vPfee+jSpQs6dOhg97ByFgNkIiIiIhs1NzfjlltuwYEDBzBnzhwEAgG7h5TzWGJBREREZJPGxkZceeWV+POf/4yTTjqJnSocghlkIiIiIhvs2LEDI0eOxKeffopnn30Wt99+u91DooMYIBMRERFlmJQSI0aMQG1tLebPn4+rr77a7iFRDAbIRERERBkmhMDDDz8MKSUGDRpk93AoDgNkIiIiogxZvnw56urqcMcdd+DCCy+0ezikgpP0iIiIiDLgr3/9KwYPHownnngCjY2Ndg+HNDBAJiIiIrLYq6++ipEjR6K4uBiffPIJ8vPz7R4SaWCJBREREZHJquqDmFm9FpsamoD/vIvvljyLQYMGoaqqCocddpjdw6MkGCATERERmaiqPoj7Fn2BplAYALB7fxidTzkftz3yJwbHLsESCyIiIiITzaxei8Z9+3Fg67cAgMP6j0DRiHvx1Aff2zwy0osBMhEREZGJNm7biW1vPYwtr96L5j07ALS0ddvU0GTzyEgvllgQERERmWTHjh3Y+eYkNG1Yg8OH3I68Toe3/uyYQr+NIyMjGCATERERmWDDhg0YOnQo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\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 预测值与真值的散点图\n",
    "plt.figure(figsize=(10, 10))\n",
    "plt.scatter(y_train, y_train_pred_ridge)\n",
    "plt.plot([-0, 1], [-0,1], '--k')   #数据已经标准化，3倍标准差即可\n",
    "plt.axis('tight')\n",
    "plt.xlabel('True ')\n",
    "plt.ylabel('Predicted ')\n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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8XXW7eudd2YBP8vMNRExB5hZzV9IY5jAXYb05MmT6ejo6OMuJUnafURE7dH0+nrh2LtoDIoAcEA1iAHV44SeXhARF1V3nOno7Ozs4+4kSWpdtUO6GjXpDOCmvuwgMxdkZntmto8fX6t3L0mS6FtP+g+BezKza6zfDRExEaB63Njs4iRJamV9OSf9bl481A2N4f3m0hjDdy6wpIl1SVJLef7551m7di3PPusIpbuLUaNGMWnSJNra2vq9jVohHRG/A5xC4w42XT4L3BgR84BfAO/odxWS1OLWrl3LK1/5SiZPnkxEs25+puGSmWzatIm1a9cyZcqUfm+nVkhXNxfYb7t5m2hc7S1JGqBnn33WgN6NRAT77bcfA71g2mFBJakQBvTupRmfpyEtSVKh+jqYiSRpCMxfNr+525vZ+/ZGjBjBUUcdxZYtW5gyZQrf+MY32Gefffq8r/e85z186EMf4vDDD3/J/GuuuYaOjg6uuuqqPm8TYPTo0WzevLnWujNnzuTKK6+kvb1927yOjg6uvfZavvSlL/Vr/8PBnrQkCYBXvOIVrFixgvvuu49x48Zx9dVX92s7X/nKV3YI6BK0t7cPekBv3bq1qdszpCVJO5gxYwbr1q3bNn3FFVdw7LHHcvTRR/PJT34SgKeffprZs2czdepUjjzySBYtWgQ0erFdQ0B//etf59BDD+Xkk0/mzjvv3La9888/n8WLF2+bHj16NACbN29m1qxZHHPMMRx11FEsWbLj/+5dv349J510EtOmTePII4/k+9//fq02LVu2jNNPPx2A+fPnc8EFFzBz5kwOPvjgl4T3ddddx3HHHce0adN473vfuy14L774Ytrb2zniiCO2vQfQGPL68ssv5/d///e56aY+jffVKw93S5JeYuvWrSxdupR58+YBcMstt7Bq1SruvvtuMpMzzjiD22+/nc7OTg488EC++93vAvDEE0+8ZDvr16/nk5/8JMuXL2fs2LG8+c1vZvr06bvc96hRo/jWt77FmDFjeOyxxzj++OM544wzXnIR1je/+U1OPfVUPv7xj7N161aeeeaZfrXzwQcf5LbbbuOpp57isMMO4+KLL2b16tUsWrSIO++8k7a2Ni655BKuv/56zjvvPD7zmc8wbtw4tm7dyqxZs7j33ns5+uijt9V9xx139KuOXTGkJUkA/OY3v2HatGk8/PDDvPGNb+SUU04BGiF9yy23bAvYzZs3s2rVKk488UQ+/OEP89GPfpTTTz+dE0888SXbu+uuu5g5cyZdQ0KfddZZ/PSnP91lDZnJxz72MW6//Xb22GMP1q1bx4YNG3jVq161bZ1jjz2WCy64gOeff54zzzyTadOm9au9s2fPZq+99mKvvfZiwoQJbNiwgaVLl7J8+XKOPfbYbe/JhAmNW1PceOONLFiwgC1btrB+/XoeeOCBbSF91lln9auG3ni4W5IEvHhOes2aNTz33HPbzklnJpdddhkrVqxgxYoVrF69mnnz5nHooYeyfPlyjjrqKC677DIuv/zyHba5s/+GNHLkSF544YVt23/uuecAuP766+ns7GT58uWsWLGCAw44YIdR2E466SRuv/12DjroIM4991yuvfbafrV3r7322vZ8xIgRbNmyhcxk7ty529r6k5/8hPnz5/Pzn/+cK6+8kqVLl3Lvvfcye/bsl9S1995796uG3tiTllSc4biyWS8aO3YsX/rSl5gzZw4XX3wxp556Kp/4xCc4++yzGT16NOvWraOtrY0tW7Ywbtw4zjnnHEaPHs0111zzku286U1v4gMf+ACbNm1izJgx3HTTTUydOhVonMddvnw573znO1myZAnPP/880DhkPmHCBNra2rjttttYs2bHuzquWbOGgw46iAsvvJCnn36ae+65h/POO68pbZ81axZz5szhgx/8IBMmTOBXv/oVTz31FE8++SR77703Y8eOZcOGDXzve99j5syZTdnnrhjSklSg4f7DYvr06UydOpUbbriBc889l5UrVzJjxgygcZHXddddx+rVq/nIRz7CHnvsQVtbG1/+8pdfso2JEycyf/58ZsyYwcSJEznmmGO2XYR14YUXMmfOHI477jhmzZq1rSd69tln87a3vY329namTZvG61//+h1qW7ZsGVdccQVtbW2MHj16pz3p2bNnbxs3e8aMGbzvfe/rtd2HH344n/70p3nrW9/KCy+8QFtbG1dffTXHH38806dP54gjjuDggw/mhBNOqP9mDkBk5pDsCKC9vT27rviTpJ1pxZ70ypUrecMb3jDcZajJevpcI2J5Zrbv5CUv4TlpSZIKZUhLklQoQ1qSCjGUpx81+JrxeRrSklSAUaNGsWnTJoN6N9F1P+lRo0YNaDte3S1JBZg0aRJr164d8P2HVY5Ro0Yx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\n",
      "text/plain": [
       "<Figure size 504x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#在训练集上观察预测残差的分布，看是否符合模型假设：噪声为0均值的高斯噪声\n",
    "f, ax = plt.subplots(figsize=(7, 5)) \n",
    "f.tight_layout() \n",
    "ax.hist(y_train - y_train_pred_ridge, bins=40, label='Residuals Linear', color='g', alpha=.5); \n",
    "ax.set_title(\"Histogram of Residuals\") \n",
    "ax.legend(loc='best');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## LASSO"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The RMSE score of Lasso on test is 0.00839797273958358\n",
      "The RMSE score of Lasso on train is 0.007453357253492781\n"
     ]
    }
   ],
   "source": [
    "#### Lasso／L1正则\n",
    "# class sklearn.linear_model.LassoCV(eps=0.001, n_alphas=100, alphas=None, fit_intercept=True, \n",
    "#                                    normalize=False, precompute=’auto’, max_iter=1000, \n",
    "#                                    tol=0.0001, copy_X=True, cv=None, verbose=False, n_jobs=1,\n",
    "#                                    positive=False, random_state=None, selection=’cyclic’)\n",
    "from sklearn.linear_model import LassoCV\n",
    "\n",
    "#1. 设置超参数搜索范围\n",
    "# alphas = [0.01, 0.1, 1, 10,100]\n",
    "\n",
    "#2. 生成学习器实例\n",
    "# lasso = LassoCV(alphas=alphas)\n",
    "\n",
    "#1. 设置超参数搜索范围\n",
    "#Lasso可以自动确定最大的alpha，所以另一种设置alpha的方式是设置最小的alpha值（eps） 和 超参数的数目（n_alphas），\n",
    "#然后LassoCV对最小值和最大值之间在log域上均匀取值n_alphas个\n",
    "# np.logspace(np.log10(0.1* 0.001), np.log10(0.1),num=100)[::-1]\n",
    "\n",
    "#2 生成LassoCV实例（默认超参数搜索范围）\n",
    "lasso = LassoCV(cv=5)  \n",
    "\n",
    "#3. 训练（内含CV）\n",
    "lasso.fit(X_train, y_train)  \n",
    "\n",
    "#4. 测试\n",
    "y_test_pred_lasso = lasso.predict(X_test)\n",
    "y_train_pred_lasso = lasso.predict(X_train)\n",
    "\n",
    "\n",
    "# 评估，使用RMSE_score评价模型在测试集和训练集上的性能\n",
    "print ('The RMSE score of Lasso on test is', mean_squared_error(y_test, y_test_pred_lasso))#分数越小越好\n",
    "print ('The RMSE score of Lasso on train is', mean_squared_error(y_train, y_train_pred_lasso))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "alpha is: 0.00019835534398377147\n"
     ]
    }
   ],
   "source": [
    "mses = np.mean(lasso.mse_path_, axis = 1)\n",
    "plt.plot(np.log10(lasso.alphas_), mses) \n",
    "# plt.plot(np.log10(lasso.alphas_)*np.ones(3), [0.3, 0.4, 1.0])\n",
    "plt.xlabel('log(alpha)')\n",
    "plt.ylabel('mse')\n",
    "plt.show()    \n",
    "            \n",
    "print ('alpha is:', lasso.alpha_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>columns</th>\n",
       "      <th>coef_lr</th>\n",
       "      <th>coef_ridge</th>\n",
       "      <th>coef_lasso</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>mnth_9</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>0.076603</td>\n",
       "      <td>0.074671</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>mnth_3</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>0.035351</td>\n",
       "      <td>0.041457</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>mnth_5</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>0.040793</td>\n",
       "      <td>0.030455</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>mnth_10</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>0.021773</td>\n",
       "      <td>0.028744</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>mnth_6</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>0.022622</td>\n",
       "      <td>0.008989</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>mnth_4</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>0.005495</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>mnth_8</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>0.005721</td>\n",
       "      <td>-0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>mnth_2</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>-0.024810</td>\n",
       "      <td>-0.005828</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>mnth_1</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>-0.037155</td>\n",
       "      <td>-0.016291</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>mnth_12</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>-0.053201</td>\n",
       "      <td>-0.035373</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>mnth_11</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>-0.051814</td>\n",
       "      <td>-0.036426</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>mnth_7</td>\n",
       "      <td>1.581468e+11</td>\n",
       "      <td>-0.041378</td>\n",
       "      <td>-0.049135</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>workingday</td>\n",
       "      <td>6.844604e+10</td>\n",
       "      <td>0.024141</td>\n",
       "      <td>0.000182</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>holiday</td>\n",
       "      <td>6.844604e+10</td>\n",
       "      <td>-0.035052</td>\n",
       "      <td>-0.056442</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>temp</td>\n",
       "      <td>3.499264e-01</td>\n",
       "      <td>0.225219</td>\n",
       "      <td>0.341407</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>yr</td>\n",
       "      <td>2.277146e-01</td>\n",
       "      <td>0.228619</td>\n",
       "      <td>0.228131</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>atemp</td>\n",
       "      <td>1.069391e-01</td>\n",
       "      <td>0.185919</td>\n",
       "      <td>0.104737</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>windspeed</td>\n",
       "      <td>-1.432005e-01</td>\n",
       "      <td>-0.126652</td>\n",
       "      <td>-0.131295</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>hum</td>\n",
       "      <td>-1.608988e-01</td>\n",
       "      <td>-0.131658</td>\n",
       "      <td>-0.142046</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>weekday_6</td>\n",
       "      <td>-9.891706e+09</td>\n",
       "      <td>0.033147</td>\n",
       "      <td>0.009064</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>weekday_0</td>\n",
       "      <td>-9.891706e+09</td>\n",
       "      <td>-0.022235</td>\n",
       "      <td>-0.043997</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>weekday_5</td>\n",
       "      <td>-7.833774e+10</td>\n",
       "      <td>0.009216</td>\n",
       "      <td>0.007440</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>weekday_3</td>\n",
       "      <td>-7.833774e+10</td>\n",
       "      <td>0.002494</td>\n",
       "      <td>0.001258</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>weekday_4</td>\n",
       "      <td>-7.833774e+10</td>\n",
       "      <td>0.000245</td>\n",
       "      <td>-0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>weekday_2</td>\n",
       "      <td>-7.833774e+10</td>\n",
       "      <td>-0.009279</td>\n",
       "      <td>-0.008217</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>weekday_1</td>\n",
       "      <td>-7.833774e+10</td>\n",
       "      <td>-0.013587</td>\n",
       "      <td>-0.012158</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>weathersit_1</td>\n",
       "      <td>-2.424241e+11</td>\n",
       "      <td>0.092051</td>\n",
       "      <td>0.060842</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>weathersit_2</td>\n",
       "      <td>-2.424241e+11</td>\n",
       "      <td>0.028758</td>\n",
       "      <td>-0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>weathersit_3</td>\n",
       "      <td>-2.424241e+11</td>\n",
       "      <td>-0.120809</td>\n",
       "      <td>-0.148728</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>season_4</td>\n",
       "      <td>-2.255948e+12</td>\n",
       "      <td>0.087523</td>\n",
       "      <td>0.065243</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>season_2</td>\n",
       "      <td>-2.255948e+12</td>\n",
       "      <td>0.012401</td>\n",
       "      <td>0.002484</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>season_3</td>\n",
       "      <td>-2.255948e+12</td>\n",
       "      <td>-0.000879</td>\n",
       "      <td>-0.019563</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>season_1</td>\n",
       "      <td>-2.255948e+12</td>\n",
       "      <td>-0.099045</td>\n",
       "      <td>-0.121486</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         columns       coef_lr  coef_ridge  coef_lasso\n",
       "12        mnth_9  1.581468e+11    0.076603    0.074671\n",
       "6         mnth_3  1.581468e+11    0.035351    0.041457\n",
       "8         mnth_5  1.581468e+11    0.040793    0.030455\n",
       "13       mnth_10  1.581468e+11    0.021773    0.028744\n",
       "9         mnth_6  1.581468e+11    0.022622    0.008989\n",
       "7         mnth_4  1.581468e+11    0.005495    0.000000\n",
       "11        mnth_8  1.581468e+11    0.005721   -0.000000\n",
       "5         mnth_2  1.581468e+11   -0.024810   -0.005828\n",
       "4         mnth_1  1.581468e+11   -0.037155   -0.016291\n",
       "15       mnth_12  1.581468e+11   -0.053201   -0.035373\n",
       "14       mnth_11  1.581468e+11   -0.051814   -0.036426\n",
       "10        mnth_7  1.581468e+11   -0.041378   -0.049135\n",
       "31    workingday  6.844604e+10    0.024141    0.000182\n",
       "30       holiday  6.844604e+10   -0.035052   -0.056442\n",
       "26          temp  3.499264e-01    0.225219    0.341407\n",
       "32            yr  2.277146e-01    0.228619    0.228131\n",
       "27         atemp  1.069391e-01    0.185919    0.104737\n",
       "29     windspeed -1.432005e-01   -0.126652   -0.131295\n",
       "28           hum -1.608988e-01   -0.131658   -0.142046\n",
       "25     weekday_6 -9.891706e+09    0.033147    0.009064\n",
       "19     weekday_0 -9.891706e+09   -0.022235   -0.043997\n",
       "24     weekday_5 -7.833774e+10    0.009216    0.007440\n",
       "22     weekday_3 -7.833774e+10    0.002494    0.001258\n",
       "23     weekday_4 -7.833774e+10    0.000245   -0.000000\n",
       "21     weekday_2 -7.833774e+10   -0.009279   -0.008217\n",
       "20     weekday_1 -7.833774e+10   -0.013587   -0.012158\n",
       "16  weathersit_1 -2.424241e+11    0.092051    0.060842\n",
       "17  weathersit_2 -2.424241e+11    0.028758   -0.000000\n",
       "18  weathersit_3 -2.424241e+11   -0.120809   -0.148728\n",
       "3       season_4 -2.255948e+12    0.087523    0.065243\n",
       "1       season_2 -2.255948e+12    0.012401    0.002484\n",
       "2       season_3 -2.255948e+12   -0.000879   -0.019563\n",
       "0       season_1 -2.255948e+12   -0.099045   -0.121486"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 看看各特征的权重系数，系数的绝对值大小可视为该特征的重要性\n",
    "fs = pd.DataFrame({\"columns\":list(feature_names), \"coef_lr\":list((lr.coef_.T)), \"coef_ridge\":list((ridge.coef_.T)), \"coef_lasso\":list((lasso.coef_.T))})\n",
    "fs.sort_values(by=['coef_lr'],ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#预测值与真值的散点图\n",
    "plt.figure(figsize=(6, 6))\n",
    "plt.scatter(y_train, y_train_pred_lasso)\n",
    "plt.plot([-0, 1], [-0,1], '--k')   #数据已经标准化，3倍标准差即可\n",
    "plt.axis('tight')\n",
    "plt.xlabel('True ')\n",
    "plt.ylabel('Predicted ')\n",
    "plt.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 比较用上述三种模型得到的各特征的系数，以及各模型在测试集上的性能。并简单说明原因。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "'''\n",
    "    OLS特征系数绝对值很大，因为没有正则项；\n",
    "    Ridge由于引入正则项，特征系数很小\n",
    "    Lasso特征系数中，有几个0值系数，说明对应的特征与预测残差是弱相关的，\n",
    "        也就是说L1正则可以带来稀疏解，根据原理alpha 越大特征的系数等于0的可能越大\n",
    "        \n",
    "    The RMSE score of LinearRegression on test is 0.008411263678485404\n",
    "    The RMSE score of LinearRegression on train is 0.007432524770631933\n",
    "    \n",
    "    The RMSE score of RidgeCV on test is 0.008346958240306478\n",
    "    The RMSE score of RidgeCV on train is 0.00746331665807188\n",
    "\n",
    "    The RMSE score of Lasso on test is 0.00839797273958358\n",
    "    The RMSE score of Lasso on train is 0.007453357253492781\n",
    "\n",
    "    训练分数：\n",
    "        OLS < Lasso < Ridge \n",
    "        \n",
    "    测试分数：\n",
    "        OLS > Lasso > Ridge\n",
    "\n",
    "    训练集上，Ridge表现最好，测试集上OLS表现最好，证明如果样本足够多，则OLS预测效果会更优\n",
    "    \n",
    "    不明白为何Lasso、Ridge的训练集跟测试集效果的差异？？\n",
    "'''"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
